r - 如何按组对变量求和

标签 r dataframe aggregate r-faq

我有一个包含两列的数据框。第一列包含“第一”、“第二”、“第三”等类别,第二列的数字代表我看到“类别”中特定组的次数。

例如:

Category     Frequency
First        10
First        15
First        5
Second       2
Third        14
Third        20
Second       3

我想按类别对数据进行排序并对所有频率求和:

Category     Frequency
First        30
Second       5
Third        34

我该如何在 R 中执行此操作?

最佳答案

使用聚合:

aggregate(x$Frequency, by=list(Category=x$Category), FUN=sum)
  Category  x
1    First 30
2   Second  5
3    Third 34
<小时/>

在上面的示例中,可以在列表中指定多个维度。可以通过 cbind 合并同一数据类型的多个聚合指标:

aggregate(cbind(x$Frequency, x$Metric2, x$Metric3) ...
<小时/>

(嵌入@thelatemail评论),aggregate也有公式接口(interface)

aggregate(Frequency ~ Category, x, sum)

或者,如果您想聚合多列,您可以使用 . 表示法(也适用于一列)

aggregate(. ~ Category, x, sum)
<小时/>

点击:

tapply(x$Frequency, x$Category, FUN=sum)
 First Second  Third 
    30      5     34 
<小时/>

使用此数据:

x <- data.frame(Category=factor(c("First", "First", "First", "Second",
                                      "Third", "Third", "Second")), 
                    Frequency=c(10,15,5,2,14,20,3))

关于r - 如何按组对变量求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1660124/

相关文章:

r - 我可以在不将函数解析为单独文件的情况下运行 package.skeleton 吗?

r - 为什么 rollapply 内部的 range(index(x)) 的行为与外部不同(仅针对我的人工数据!)

r - 当我在 vars() 中只传递一列时,为什么 mutate_at 不会为新列创建不同的名称?

mysql - 查询以获取行的标识符和聚合函数值

r - 缩短坐标之间的箭头/线/段

r - 如何删除重复项但在R中保留最新数据

r - 使用另一个表中的数据将列添加到表中

sql - 聚合函数上的 Postgres "group by"

r - 如何按小时计算一段时间内的平均值?

r - 使用 gtable 排列 ggplot 图(具有相同宽度的 grobs)以创建 2x2 布局