我在R
中运行以下Rstudio
代码,目的是将宽数据帧(称为“合并”)转换为长数据帧。
> 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
数据集的rownames中的数据需要唯一地标识融化数据集中的观察结果。要在熔化的数据集中包含rownames,请将以下内容添加到代码中。
merged$Description <- rownames(merged)
然后你的原始代码应该产生预期的结果。
library(reshape2)
merged_long <- melt(data=merged,
id.vars="Description",
variable.name="Month",
value.name="RN")
考虑到数据的性质,最简单的方法就是使用melt(as.matrix(...))
。如果你的数据已经是as.matrix
,请忽略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