如何将数据表化成以年后缀为变量列的人年? [英] How to melt with data.table into person years getting year suffix as variable column?

查看:13
本文介绍了如何将数据表化成以年后缀为变量列的人年?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个数据表,如下所示:

      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后缀填充?我可以使用basereshapetidyr做到这一点,但我有一个非常大的数据集,它要求data.table的内存效率。

推荐答案

在Frank链接的FR实现之前,我们将不得不手动设置级别(variableol是因素):

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆