聚合函数不直观

时间:2016-05-31 08:11:18

标签: r aggregate

就像下面关于聚合函数的源代码一样,我无法理解为什么我们必须在这里使用list function()。而不是我想用一个需要分组的列替换它。而且我不知道为什么我们使用相同的数据集,例如' train [Sales!= 0]'两次?如果我使用其他数据集作为第二个数据集参数怎么办?我认为它会让变化成为一个相当高的错误。

aggregate(train[Sales != 0]$Sales, 
               by = list(train[Sales != 0]$Store), mean)

也许有人可以说这是错误的用例。但我也在R文档中看到了这个源代码

## Compute the averages for the variables in 'state.x77', grouped
## according to the region (Northeast, South, North Central, West) that
## each state belongs to.
aggregate(state.x77, list(Region = state.region), mean)

感谢您阅读我的问题。

1 个答案:

答案 0 :(得分:1)

首先,如果您不喜欢聚合函数的语法,可以查看dplyr包。它的语法对您来说可能更容易一些。

回答你的问题:

  1. 第二个参数只是一个列表,因此您可以添加多个变量。
  2. 您必须使用train[Sales != 0]两次,否则第一个和by参数会查看不同的索引。您也可以先制作一个子集:
  3. 基础R代码:

    trainSales <- train[Sales != 0]  
    aggregate( trainSales$Sales, by = list(trainSales$Store), mean )
    

    使用dplyr,您可以执行以下操作:

    train %>%
        filter( Sales != 0) %>%
        group_by( Store ) %>%
        summarise_each( funs(mean) )
    

    您看到我使用summarise_each因为它将数据集压缩到一行,但您当然也可以做一些使所有行保持不变的内容(在这种情况下,使用do)。