2017-12-18 132 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 
相關問題