我希望获取当前广泛的数据并将其融合为长格式。诀窍是我想创建一个序列指示器。
以下是我的数据:
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"))
然后迭代数据以清理结果,但我知道重塑是一个很棒的包,我想在重新发明轮子之前询问。
答案 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()
中。