我刚刚注意到聚合从结果中消失了空组,我该如何解决这个问题?例如
`xx <- c("a", "b", "d", "a", "d", "a")
xx <- factor(xx, levels = c("a", "b", "c", "d"))
y <- rnorm(60, 5, 1)
z <- matrix(y, 6, 10)
aggregate(z, by = list(groups = xx), sum)`
xx
是一个具有 4 个级别的因子变量,但结果仅给出 3 行,并且希望 "c"
级别的一行为零。我希望 table(xx)
具有相同的行为,即使对于没有观测的水平也能给出频率。
我们可以仅使用“xx”的
data.frame
创建另一个levels
,然后使用merge
创建aggregate
。输出将包含所有“组”,而与其他列的缺失级别对应的行将为 NA。
merge(data.frame(groups=levels(xx)),
aggregate(z, by = list(groups = xx), sum), all.x=TRUE)
另一种选择可能是使用
melt
转换为“长”格式,然后使用 dcast
和 fun.aggregate
作为“总和”和 drop=FALSE
library(data.table)
dcast(melt(data.table(groups=xx, z), id.var='groups'),
groups~variable, value.var='value', sum, drop=FALSE)
从R 3.5.0开始,添加了新参数“drop”, 因此,使用以下代码
aggregate(z, by = list(groups = xx), sum,drop=F)
将显示未使用的组合。