我刚注意到聚合从结果中消失了空组,我该如何解决? e.g。
`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)
的相同行为即使对于没有观察的水平也能给出频率。
答案 0 :(得分:2)
我们可以使用&{39} xx&#39;的data.frame
创建另一个levels
然后使用merge
aggregate
。输出将包含所有&#39;组。而对应于其他列的缺失级别的行将是NA。
merge(data.frame(groups=levels(xx)),
aggregate(z, by = list(groups = xx), sum), all.x=TRUE)
另一个选择可能是转换为&#39; long&#39;格式为melt
,然后将dcast
与fun.aggregate
一起使用为&#39; sum&#39;和drop=FALSE
library(data.table)
dcast(melt(data.table(groups=xx, z), id.var='groups'),
groups~variable, value.var='value', sum, drop=FALSE)