这是我要解决的简单问题:我有一个如下表所示的 data.table,我正在尝试使用dcast.data.table
函数来计算每个组的进步数量,但我也有兴趣计算median
成绩每组:
set.seed(10);
DT = data.table(GROUP = sample(c("a","b","c"),100,replace = T),
ADVANCED = sample(c("ADVANCED","DROP"),100,replace = T),
GRADE = sample(1:10,100, replace=T))
GROUP ADVANCED GRADE
1: b ADVANCED 3
2: a ADVANCED 6
3: b ADVANCED 7
4: c ADVANCED 9
95: b DROP 6
96: c ADVANCED 5
97: a DROP 10
98: b ADVANCED 1
99: c DROP 6
100: a DROP 2
GROUP ADVANCED GRADE
基本上这里是我正在寻找的结果:
result = merge(
dcast.data.table(DT,.Primitive("~")(GROUP,ADVANCED)),
dcast.data.table(DT,.Primitive("~")(GROUP,.),
value.var="GRADE",
fun.aggregate=median));
setnames(result,".","MEDIAN_GRADE")
GROUP ADVANCED DROP MEDIAN_GRADE
1: a 17 19 6
2: b 20 21 7
3: c 13 10 6
现在我想知道如何在不制作两个单独的 dcast 表并在最后合并的情况下做到这一点。我正在处理我的表中的许多行和列,并且按键分组是一个瓶颈。我想知道有没有更好的方法来计算这个?
** 由于我的第一个问题含糊不清,我完全编辑(感谢 Frank 和 Akrun 的反馈)。