如何将数据表化成以年后缀为变量列的人年? [英] How to melt with data.table into person years getting year suffix as variable column?
本文介绍了如何将数据表化成以年后缀为变量列的人年?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有一个数据表,如下所示:
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的数字填充的。有没有办法让Year列由变量名中的Year后缀填充?我可以使用basereshape
和tidyr
做到这一点,但我有一个非常大的数据集,它要求data.table的内存效率。
推荐答案
在Frank链接的FR实现之前,我们将不得不手动设置级别(variable
ol是因素):
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]))
这篇关于如何将数据表化成以年后缀为变量列的人年?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文