一次聚合多个列

时间:2015-12-30 05:50:17

标签: r aggregate

我有一个数据框似的:

false

我希望通过id1& ID2。我希望能够同时获得val1,val2,val3,val4的平均值。

我该怎么做?

这是我现在拥有的,但它仅适用于1列:

$this->disFunctions

另外,如何重命名在上面给出的相同语句中作为均值输出的列

2 个答案:

答案 0 :(得分:37)

我们可以使用aggregate的公式方法。 ' rhs'上的变量。 ~是分组变量,而.代表' df1'中的所有其他变量。 (从示例中,我们假设除了分组之外的所有列都需要mean),指定数据集和函数(mean)。

aggregate(.~id1+id2, df1, mean)

或者我们可以在分组后使用summarise_each中的dplyr group_by

library(dplyr)
df1 %>%
    group_by(id1, id2) %>% 
    summarise_each(funs(mean))

或另一个选项是data.table。我们转换了' data.frame'到' data.table' (setDT(df1),按' id1'和' id2'分组,我们遍历data.table(.SD)的子集并获取{{1} }。

mean

数据

library(data.table)
setDT(df1)[, lapply(.SD, mean), by = .(id1, id2)] 

答案 1 :(得分:11)

你可以尝试:

agg <- aggregate(list(x$val1, x$val2, x$val3, x$val4), by = list(x$id1, x$id2), mean)