首页 > 解决方案 > R 中的聚合不会返回控制台上显示的实际数据

问题描述

我正在尝试从以下数据中创建一个包含平均值和计数的聚合表

> sample_data
   sample percent
1       A       5
2       A       2
3       A       3
4       B       7
5       B       7
6       C       4
7       C       3
8       C       2
9       C       3
10      D       5

我用这个功能

aggregate_sample =aggregate(sample_data[,2], list(sample_data$sample), FUN=function(x) c(mn=mean(x),ln=length(x)))

从控制台输出,我确实得到了我想要的:

> aggregate_sample
  Group.1     x.mn     x.ln
1       A 3.333333 3.000000
2       B 7.000000 2.000000
3       C 3.000000 4.000000
4       D 5.000000 1.000000

但是,当我单击聚合样本的数据时,我只得到这个

  Group.1     x
1       A 3.333333
2       B 7.000000
3       C 3.000000
4       D 5.000000

谁能帮助我如何获得正确的表格结果?

标签: raggregate

解决方案


问题是列“x”是一个matrix有 2 列的列,正如我们c(mn=mean(x),ln=length(x)FUN. 我们可以将其更改为常规 data.frame

aggregate_sample1 <- do.call(data.frame, aggregate_sample)

对于这些操作,另一种方式是dplyr,这可以以直接的方式完成

library(dplyr)
sample_data %>% 
     group_by(sample) %>%
     summarise(mn = mean(percent), ln = n())

或使用data.table

library(data.table)
setDT(sample_data)[, .(mn = mean(percent), ln = .N), by = sample]

推荐阅读