r - 使用聚合保留零长度组

标签 r aggregate

我刚刚注意到聚合从结果中消失了空组,我该如何解决这个问题?例如

`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' 然后是 mergeaggregate .输出将包含所有“组”,而与其他列的缺失级别对应的行将为 NA。

merge(data.frame(groups=levels(xx)),
   aggregate(z, by = list(groups = xx), sum), all.x=TRUE)

另一种选择可能是使用 melt 转换为“长”格式然后使用 dcastfun.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/

相关文章:

返回分组数据子组的最小值

ruby-on-rails - 如何在创建方面运算符的数组上查找 id

列和整数上的Mysql min函数

mongodb聚合获取当前日期

r - 将 geom_rect() 添加到 ggplot2 中的时间序列数据

使用 coord_polar() 时旋转 x 轴文本

使用 writeogr() 下载 Shapefile 时出现 R Shiny downloadHandler() 错误

r - 在 NAMESPACE 中使用 Roxygen 制作 S3method

折叠/分组列表以聚合最大/最小值的 Pythonic 方式

java - 获取Elasticsearch中多个字段的聚合