在R中重新变换为长整数并包含序列号

时间:2012-01-24 23:11:47

标签: r reshape

我希望获取当前广泛的数据并将其融合为长格式。诀窍是我想创建一个序列指示器。

以下是我的数据:

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"))

然后迭代数据以清理结果,但我知道重塑是一个很棒的包,我想在重新发明轮子之前询问。

2 个答案:

答案 0 :(得分:4)

以下是使用reshape R中的base函数的单行内容(不要与reshape包混淆)

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

答案 1 :(得分: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()中。