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 回答