将宽数据帧转换为长格式的 R 代码有什么问题?
What is wrong with my R codes for transforming a wide data frame into the long format?
我是 运行 Rstudio
中的以下 R
代码,目的是将宽数据帧(称为 'merged')转换为长数据帧。
> merged
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2017 (A) 5980 5341 5890 5596 5753 5470 5589 5545 5749 5938 5844 5356
2017 (P) 5762 5275 5733 5411 5406 4954 5464 5536 5805 5819 5903 5630
我正在寻找以下输出:
Description Month RN
2017 (A) Jan 5980
2017 (P) Jan 5762
2017 (A) Feb 5341
2017 (P) Feb 5275
... ... ...
我尝试了以下方法(但没有成功):
library(reshape2)
merged_long <- melt(data=merged,
id.vars="Description",
variable.name="Month",
value.name="RN")
我收到以下错误消息:
Error: id variables not found in data: Description
我做错了什么?
正如@Sotos 在评论中指出的那样,merged
数据集的行名中的数据需要唯一标识融化数据集中的观察值。要在融化的数据集中包含行名,请将以下内容添加到您的代码中。
merged$Description <- rownames(merged)
那么您的原始代码应该会产生预期的结果。
library(reshape2)
merged_long <- melt(data=merged,
id.vars="Description",
variable.name="Month",
value.name="RN")
考虑到数据的性质,仅使用 melt(as.matrix(...))
最简单。显然,如果您的数据已经是 matrix
,请省略 as.matrix
部分。
melt(as.matrix(mydf))
您可以使用setNames
同时重命名列:
setNames(melt(as.matrix(mydf)), c("Description", "Month", "RN"))
# Description Month RN
# 1 2017 (A) Jan 5980
# 2 2017 (P) Jan 5762
# 3 2017 (A) Feb 5341
# .........................
# .........................
# 23 2017 (A) Dec 5356
# 24 2017 (P) Dec 5630
我是 运行 Rstudio
中的以下 R
代码,目的是将宽数据帧(称为 'merged')转换为长数据帧。
> merged
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2017 (A) 5980 5341 5890 5596 5753 5470 5589 5545 5749 5938 5844 5356
2017 (P) 5762 5275 5733 5411 5406 4954 5464 5536 5805 5819 5903 5630
我正在寻找以下输出:
Description Month RN
2017 (A) Jan 5980
2017 (P) Jan 5762
2017 (A) Feb 5341
2017 (P) Feb 5275
... ... ...
我尝试了以下方法(但没有成功):
library(reshape2)
merged_long <- melt(data=merged,
id.vars="Description",
variable.name="Month",
value.name="RN")
我收到以下错误消息:
Error: id variables not found in data: Description
我做错了什么?
正如@Sotos 在评论中指出的那样,merged
数据集的行名中的数据需要唯一标识融化数据集中的观察值。要在融化的数据集中包含行名,请将以下内容添加到您的代码中。
merged$Description <- rownames(merged)
那么您的原始代码应该会产生预期的结果。
library(reshape2)
merged_long <- melt(data=merged,
id.vars="Description",
variable.name="Month",
value.name="RN")
考虑到数据的性质,仅使用 melt(as.matrix(...))
最简单。显然,如果您的数据已经是 matrix
,请省略 as.matrix
部分。
melt(as.matrix(mydf))
您可以使用setNames
同时重命名列:
setNames(melt(as.matrix(mydf)), c("Description", "Month", "RN"))
# Description Month RN
# 1 2017 (A) Jan 5980
# 2 2017 (P) Jan 5762
# 3 2017 (A) Feb 5341
# .........................
# .........................
# 23 2017 (A) Dec 5356
# 24 2017 (P) Dec 5630