2017-11-14 4 views
2

私はこのようなユニークなIDと他の列を持っているデータフレームがあります。メルト列

それが2列にどの意志IDを持つものを持っていることを目指しデータフレームを溶融させることができる方法
df = data.frame(id = c('id1', 'id2', 'id3'), 
       col_1 = c(0,1,0), 
       col_2 = c(1,0,0), 
       col_3 = c(1,1,NA), 
       col_4 = c(1,NA,NA)) 

を列の数に基づいて繰り返され、2番目の列には他の列の値が含まれます。期待される出力の

例:

df = data.frame(id = c('id1', 'id1', 'id1', 'id1', 'id2', 'id2', 'id2', 'id2', 'id3', 'id3', 'id3', 'id3'), 
       col_1 = c(0,1,1,1,1,0,1,NA,0,0,NA,NA)) 
+0

'(= "ID" によって、DF)を溶融' –

+1

'tidyr ::(DF、VAR、値、ギャザー - id) ' – useR

答えて

1

が試す:

library(reshape2) 
df = data.frame(id=c('id1', 'id2', 'id3'),col_1 = c(0,1,0),col_2 = c(1,0,0),col_3 = c(1,1,NA),col_4 = c(1,NA,NA)) 
x <- melt(df, id.vars = "id") 
x[order(x$id),c(1,3)] 
+0

ありがとうございます。 (x $ id)、c(1,3)] 'c(1,3)は入力データフレームの行数を参照していますか? – PitterJe

+0

素晴らしい! Rで行列を扱うとき、角括弧の間の最初の値は行を参照し、2番目の列は列(x [行、列])を参照します。私。 c(1,3)は行列から列1と3をスライスします(そしてorder(x $ id)は行をソートするだけです)@PitterJe – Pierre

関連する問題