【问题标题】:Grouping R data multiple times before summing在求和之前多次分组 R 数据
【发布时间】:2017-09-19 12:53:20
【问题描述】:

我正在尝试按多个变量对我的数据进行分组,然后提供一个汇总表来显示每个组内的值的总和。

我创建了以下数据作为示例。

Value <- c(21000,10000,50000,60000,2000, 4000, 5500, 10000, 35000, 40000)
Group <- c("A", "A", "B", "B", "C", "C", "A", "A", "B", "C")
Type <- c(1, 2, 1, 2, 1, 1, 1, 2, 2, 1)
Matrix <- cbind(Value, Group, Type)

我想首先按“组”变量对上述数据进行分组,然后按“类型”变量对这些值进行求和,并获得类似于我在 Excel 上工作的附加示例的输出。如果我只想按一个变量分组,我通常会使用聚合函数,但不确定是否可以将其转换为多个变量?

除此之外,我还需要提供一个相同的表,但使用“计数”函数而不是“总和”计算值。

提前非常感谢!

【问题讨论】:

  • 抱歉,现在应该附上 Excel 示例

标签: r grouping aggregate summary


【解决方案1】:

您可以向aggregate 提供多个分组:

df <- data.frame(Value, Group, Type)

> aggregate(df$Value, list(Type = df$Type, Group = df$Group), sum)
  Type Group     x
1    1     A 26500
2    2     A 20000
3    1     B 50000
4    2     B 95000
5    1     C 46000
> aggregate(df$Value, list(Type = df$Type, Group = df$Group), length)
  Type Group x
1    1     A 2
2    2     A 2
3    1     B 1
4    2     B 2
5    1     C 3

还有其他可能更容易使用的包,例如data.table:

>library(data.table)
>dt <- as.data.table(df)
>dt[, .(Count = length(Value), Sum = sum(Value)), 
   by = .(Type, Group)]

   Type Group Count   Sum
1:    1     A     2 26500
2:    2     A     2 20000
3:    1     B     1 50000
4:    2     B     2 95000
5:    1     C     3 46000

dplyr 是另一种选择,@waskuf 就是一个很好的例子。

【讨论】:

    【解决方案2】:

    使用dplyr(注意“Matrix”需要是data.frame):

    library(dplyr)
    Matrix <- data.frame(Value, Group, Type)
    
    Matrix %>% group_by(Group, Type) %>% summarise(Sum = sum(Value),
                                                   Count = n()) %>% ungroup()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-02-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-23
      • 1970-01-01
      • 2019-11-13
      • 2019-12-27
      相关资源
      最近更新 更多