2017-07-11 26 views
0

反復変数をマージするが、私はこの1つを見つけるように見えることはできませんので、ここで私の処女質問です:分割列は、私は通常、ここに掲載前の質問で答えを見つける

私は、データフレームを持っています繰り返し値を持つ1つの列では、私は他の列を分割し、元のデータフレームよりも最初の列に1つの値と複数の列しか持たないことを望みます。

例:

df <- data.frame(test = c(rep(1:5,3)), time = sample(1:100,15), score = sample(1:500,15)) 

元のデータフレームは、3列及び15行を有します。

これは5行のデータフレームになり、 'test'、 'time1'、 'time2'、 'time3'、 'score1'、score2 '、' score3 'の7つの列に分割されます。 。

これはどのように行うことができますか?

+0

ようこそ! [ツアー](https://stackoverflow.com/tour)を見て回り、[ヘルプセンター](https://stackoverflow.com/help)を読んでください。[どうすればよいですか良い質問?](https://stackoverflow.com/help/how-to-ask)。 問題を解決するためにこれまで行ってきた作業と、それを解決している問題の説明 –

+0

私はベストを尽くしましたが、出力をコピー/ペースト(希望)する方法はわかりません質問。歓迎してくれてありがとう、私はヘルプセンターを読んだ、私の質問が以下の場合は申し訳ありません。私はそれをもう一度読むでしょう。 CBIND正しい 'to'binded = do.call(CBIND、DF)' – Ifar

答えて

1

私はdata.tableパッケージからrowiddcastを使用してだと思うが、この作業に適しています:

library(data.table) 
dcast(setDT(df), test ~ rowid(test), value.var = c('time','score'), sep = '') 

結果:スタックオーバーフローへ

test time1 time2 time3 score1 score2 score3 
1: 1 52  3 29  21 131  45 
2: 2 79 44  6 119  1 186 
3: 3 67 95 39  18 459 121 
4: 4 83 50 40 493 466 497 
5: 5 46 14  4 465  9  24 
+0

ありがとう、これはトリックをするようだ! – Ifar

0

これを試してください:

df <- data.frame(test = c(rep(1:5,3)), time = sample(1:100,15), score = sample(1:500,15)) 

df$class <- c(rep('a', 5), rep('b', 5), rep('c', 5)) 


df <- split(x = df, f = df$class) 

binded <- cbind(df[[1]], df[[2]], df[[3]]) 

binded <- binded[,-c(5,9)] 


> binded 
    test time score class time.1 score.1 class.1 time.2 score.2 class.2 
1 1 40 404  a  57  409  b  70  32  c 
2 2 5 119  a  32  336  b  93  177  c 
3 3 20 345  a  44  91  b 100  42  c 
4 4 47 468  a  60  265  b  24  478  c 
5 5 16 52  a  38  219  b  3  92  c 

はそれがあなたのために働くなら、私を知ってみましょう!

+1

この 'バインドさ<を変更することができ!ヒントありがとう!もっと頻繁に 'do.call'を使わなければならないと思います! – Wen

+0

([[1]]、[[2]] DF、[[3]] DF DF) - –

+1

独創的な解決策と、すばやく返答いただきありがとうございます。しかし、私はh3rm4nのソリューションは、この特定の問題のために少しきれいだと思う。 – Ifar

関連する問題