【发布时间】:2013-09-18 07:59:27
【问题描述】:
我有一个 data.table,其中包含空级别的因子列。我需要获取其他变量的行数和总和,所有变量都按多个因素分组,包括具有空级别的因素。 我的问题与one 类似,但这里我需要考虑多个因素。
例如,设 data.table 为:
library('data.table')
dtr <- data.table(v1=sample(1:15),
v2=factor(sample(letters[1:3], 15, replace = TRUE),levels=letters[1:5]),
v3=sample(c("yes", "no"), 15, replace = TRUE))
我想做以下事情:
dtr[,list(freq=.N,mm=sum(v1,na.rm=T)),by=list(v2,v3)]
#Output is:
v2 v3 freq mm
1: b yes 4 22
2: b no 1 13
3: c no 3 10
4: a no 4 49
5: c yes 1 10
6: a yes 2 16
我希望输出也包括 v2 的空级别(“d”和“e”),就像在 table(dtr$v2,dtr$v3) 中一样,所以最终输出应该看起来像(顺序无关紧要):
v2 v3 freq mm
1: b yes 4 22
2: b no 1 13
3: c no 3 10
4: a no 4 49
5: c yes 1 10
6: a yes 2 16
7: d yes 0 0
8: d no 0 0
9: e yes 0 0
10: e no 0 0
我尝试使用链接中使用的方法,但是在使用多个列时我不确定如何使用联合J()函数。
这仅适用于按 1 列分组:
setkey(dtr,v2)
dtr[J(levels(v2)),list(freq=.N,mm=sum(v1,na.rm=T))]
但是,dtr[J(levels(v2),v3),list(freq=.N,mm=sum(v1,na.rm=T))] 不包括所有组合
【问题讨论】:
-
我发现如果我更改值的顺序并设置
setkey(dtr,v3,v2)和unique(dtr[J(v3,levels(v2)),list(freq=.N,mm=sum(v1,na.rm=T))])将起作用,但任何人都可以解释为什么以及它是否适用于大于 2 的大 data.table组? -
谢谢@Asayat。我在这里提交了 FR #4914:r-forge.r-project.org/tracker/…
-
R-Forge 的链接已损坏。现在可以在 github github.com/Rdatatable/data.table/issues/562 上找到功能请求。
标签: r data.table