R data.table:2级分组,将结果存储在由第1级值命名的新列中

时间:2017-11-16 05:31:42

标签: r data.table

考虑下一个:

dt1 <- data.table(id = c(1,1,1,2,2,2,2), status = c(0,1,1,2,3,0,2), val = c(2,2,4,1,2,3,1))

我使用group by(id,status)和mean func来创建名称包含0到3状态值的列:

stat <- c(0:3)
for(i in 1:length(stat)) dt1[, eval(paste("meanval.stat.", stat[i], sep = "")) := mean(val, na.rm = TRUE), by = .(id, status == stat[i])]

下一步结果:

   id status val meanval.stat.0 meanval.stat.1 meanval.stat.2 meanval.stat.3
1:  1      0   2       2.000000           2.00       2.666667       2.666667
2:  1      1   2       3.000000           3.00       2.666667       2.666667
3:  1      1   4       3.000000           3.00       2.666667       2.666667
4:  2      2   1       1.333333           1.75       1.000000       1.666667
5:  2      3   2       1.333333           1.75       2.500000       2.000000
6:  2      0   3       3.000000           1.75       2.500000       1.666667
7:  2      2   1       1.333333           1.75       1.000000       1.666667

但我期待下一个结果:

   id status val meanval.stat.0 meanval.stat.1 meanval.stat.2 meanval.stat.3
1:  1      0   2       2                  3          0              0
2:  1      1   2       2                  3          0              0
3:  1      1   4       2                  3          0              0
4:  2      2   1       3                  0          1              2
5:  2      3   2       3                  0          1              2
6:  2      0   3       3                  0          1              2
7:  2      2   1       3                  0          1              2

我不明白我的解决方案逻辑是什么错误

1 个答案:

答案 0 :(得分:1)

也许逻辑是按'id'分组,基于通过将'status'与'stat'的每个元素进行比较而创建的逻辑vector来'val'的子集,得到{{1将它分配给新列('nm1'),如果有meanNaN将其分配给0

set