Warm tip: This article is reproduced from serverfault.com, please click

r-如何按组对变量求和

(r - How to sum a variable by group)

发布于 2009-11-02 09:01:28

我有两列的数据框。第一列包含诸如“第一”,“第二”,“第三”之类的类别,第二列具有代表我从“类别”中看到特定组的次数的数字。

例如:

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中执行此操作?

Questioner
user5243421
Viewed
0
192 2018-10-29 04:40:39

使用aggregate

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

在上面的示例中,可以在中指定多个尺寸list可以通过cbind以下方式合并同一数据类型的多个汇总指标

aggregate(cbind(x$Frequency, x$Metric2, x$Metric3) ...

(嵌入@thelatemail评论),aggregate也具有公式界面

aggregate(Frequency ~ Category, x, sum)

或者,如果你想汇总多列,则可以使用.表示法(也适用于一列)

aggregate(. ~ Category, x, sum)

tapply

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))