我的R代码将宽数据帧转换为长格式有什么问题?

问题描述 投票:0回答:2

我在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

我究竟做错了什么?

r dataframe transpose reshape2
2个回答
0
投票

正如@Sotos在评论中所指出的那样,merged数据集的rownames中的数据需要唯一地标识融化数据集中的观察结果。要在熔化的数据集中包含rownames,请将以下内容添加到代码中。

merged$Description <- rownames(merged)

然后你的原始代码应该产生预期的结果。

library(reshape2)
merged_long <- melt(data=merged, 
               id.vars="Description", 
               variable.name="Month",
               value.name="RN")

0
投票

考虑到数据的性质,最简单的方法就是使用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
© www.soinside.com 2019 - 2024. All rights reserved.