我刚刚注意到聚合从结果中消失了空组,我该如何解决这个问题?例如
`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)
的相同行为,即使对于没有观测值的水平也能给出频率。
最佳答案
我们可以创建另一个 data.frame
只有 levels
'xx' 然后是 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 - 使用聚合保留零长度组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36053160/