【发布时间】:2013-05-14 11:39:08
【问题描述】:
假设我有一个 data.table:
x <- data.table(x=runif(3), group=factor(c('a','b','a'), levels=c('a','b','c')))
我想知道x 中每个group 存在多少行:
x[, .N, by="group"]
# group N
# 1: a 2
# 2: b 1
问题:有没有办法强制上述by="group"考虑所有级别的因素group?
请注意,由于我在表中没有任何带有 group 'c' 的行,因此我没有找到 c 的行。
期望的输出:
x[, .N, by="group", ???] # somehow use all levels in `group`
# group N
# 1: a 2
# 2: b 1
# 3: c 0
【问题讨论】:
-
为什么不在之后添加缺少的级别,例如
merge(y,data.table(group=levels(x[,group])),by="group",all=TRUE),然后将NAs 变成0? -
我不知道一个通用的解决方案,但是对于
.N单独来说,你可以依靠table:x[,table(group)](你可能已经知道了)。
标签: r data.table