3

現在幅の広いデータを取り、それを長い形式に溶かしたいと考えています。トリックは、シーケンスインジケーターを作成したいということです。

ここに私のデータがあります:

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

私が探しているもの:

   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

私はこれを使用できると思います:

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

後でデータを反復処理して結果をクリーンアップしますが、reshape が優れたパッケージであることは知っているので、車輪を再発明する前に質問したいと思いました。

4

2 に答える 2

4

reshapeこれはRの関数を使用したワンライナーです(パッケージbaseと混同しないでください)reshape

reshape(df.wide, varying = 2:3, timevar = 'rank', sep = "", direction = 'long')
于 2012-01-25T20:06:06.003 に答える
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

ただし、どちらのバージョンも数字ではなく文字を与えることに注意してください。数字が必要な場合はラップしgsubます。as.numeric()

于 2012-01-24T23:38:21.687 に答える