2017-12-18 142 views
0

我运行下面RRstudio,目的是宽的数据帧(称为“合并”)转换成一个漫长的。我的R代码将宽数据帧转换为长格式时出了什么问题?

> 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 

我在做什么错?

+4

那么,错误是很清楚的。您的'merged'数据框中没有名为'Description'的变量。看来,2017年'(A),2017年(P)'是rownames – Sotos

+0

谢谢,我知道了! – user3115933

回答

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(...))。如果你的数据已经是一个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 
相关问题