我有一个 data.table 看起来像:
PID vara90 vara91 vara92 vara93 varb90 varb91 varb92 varb93
1: 1 2 1 45 77 "Str1" "Str3" "Str3" "Str1"
2: 2 6 1 5 3 "Str2" "Str5" "Str4" "Str1"
3: 3 1 1 56 65 "Str3" "Str2" "Str6" "Str1"
4: 4 8 1 45 9 "Str1" "Str8" "Str3" "Str2"
5: 5 12 3 45 44 "Str4" "Str1" "Str8" "Str3"
6: 6 2 6 78 1 "Str5" "Str3" "Str1" "Str4"
7: 7 2 3 45 23 "Str2" "Str1" "Str3" "Str1"
8: 8 2 1 44 87 "Str1" "Str3" "Str1" "Str4"
并希望将其转换为具有以下形状的长格式:
PID year vara varb
1: 1 90 2 "Str1"
2: 1 91 1 "Str3"
3: 1 92 45 "Str3"
.
.
.
我在用:
melt(df, id.vars("PID", measure=patterns("^vara","^varb"), value.name=c("vara","varb"),variable.name="year)
这让我得到了我想要的,除了year
列由 1 到 3 的数字填充。有没有办法让年份列由变量名称中的年份后缀填充?我可以用基地做到这一点reshape
与tidyr
,但我有一个非常大的数据集,需要 data.table 的内存效率。
在 Frank 链接的 FR 实现之前,我们必须手动设置级别(variable
col is factor):
ans = melt(dt, measure = patterns("^vara", "^varb"),
value.name = c("vara", "varb"), variable.name = "year")
setattr(ans$year, 'levels', gsub("vara", "", names(dt)[2:5]))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)