在R中将宽格式转换为长格式并包括序列号

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是一个很好的包,想问一下是否需要重复造轮子。

2个回答

4
这是一个使用基本R中的reshape函数(不要与reshape包混淆)的一行代码。
reshape(df.wide, varying = 2:3, timevar = 'rank', sep = "", direction = 'long')

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接