2017-12-18 4 views
0

広いデータフレーム(「マージ」と呼ばれる)を長いものに変換する目的で、RコードをRstudioに実行しています。ワイドデータフレームをロングフォーマットに変換する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)'は名前がついているようです。 – 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 
関連する問題