2012-01-24 13 views
3

私は現在幅の広いデータを取り込み、それを長いフォーマットに解き込みたいと考えています。トリックは、私がシーケンスインジケータを作成したいということです。ここでRのワイドからロングまでの変形とシーケンス番号を含む

は私のデータです:

df.wide <- data.frame(id = 1:5, 
         code1 = sample(month.abb, 5), 
         code2 = sample(month.abb, 5)) 

私が探しています何:

melt(df.wide, id=c("id")) 

とaftewardsデータを反復処理:私はこれを使用することができることを疑う

id rank value 
1 1 1  Dec 
2 1 2  Jan 
3 2 1  May 
4 2 2  Jun 
5 3 1  Aug 
6 3 2  Aug 
7 4 1  Sep 
8 4 2  Mar 
9 5 1  Dec 
10 5 2  Nov 

結果をきれいにすることができますが、私はリシェイプが素晴らしいパッケージであり、私がホイールを再構築する前に尋ねたいと思っていました。

答えて

4

これは大きいbase R(reshapeパッケージと混同しない)

reshape(df.wide, varying = 2:3, timevar = 'rank', sep = "", direction = 'long') 
+1

reshape関数を使用してワンライナーです。まさに私が探していたものです。ありがとう。 – Btibert3

2

私が知る限り、あなたは軌道に乗っています。

df.melt <- melt(df.wide, idvar='id', variable_name='rank') 
df.melt$rank <- gsub('code', '', df.melt$rank) 

言うまでもなく反復する必要はありません。両方のバージョンは、文字ではなく数字を与えることに気づく、

levels(df.melt$rank) <- 1:2 

をしかし:

また、使用することができます。数字が必要な場合はgsubas.numeric()にラップしてください。ここ

関連する問題