如何使用dplyr将函数应用于所有非group_by列?

时间:2014-03-25 19:47:17

标签: r dplyr

我尝试使用dplyr软件包将函数应用于未分组的data.frame中的所有列,我会对aggregate()执行此操作:

aggregate(. ~ Species, data = iris, mean)

其中mean适用于未用于分组的所有列。 (是的,我知道我可以使用聚合,但我试图理解dplyr。)

我可以像这样使用summarize

species <- group_by(iris, Species)
summarize(species,
          Sepal.Length = mean(Sepal.Length),
          Sepal.Width = mean(Sepal.Width))

但是有没有办法将mean()应用于所有未归类的列,类似于. ~的{​​{1}}符号?我有一个包含30列的data.frame,我想要聚合,因此写出单个语句并不理想。

2 个答案:

答案 0 :(得分:34)

如果你愿意尝试一个实验性的dplyr,你可以尝试一下 新的(仍然是实验性的)summarise_each()

devtools::install_github("hadley/dplyr", ref = "colwise")

library(dplyr)
iris %.%
  group_by(Species) %.%
  summarise_each(funs(mean))
## Source: local data frame [3 x 5]
## 
##      Species Sepal.Length Sepal.Width Petal.Length Petal.Width
## 1     setosa        5.006       3.428        1.462       0.246
## 2 versicolor        5.936       2.770        4.260       1.326
## 3  virginica        6.588       2.974        5.552       2.026

iris %.%
  group_by(Species) %.%
  summarise_each(funs(min, max))
## Source: local data frame [3 x 9]
## 
##      Species Sepal.Length_min Sepal.Width_min Petal.Length_min
## 1     setosa              4.3             2.3              1.0
## 2 versicolor              4.9             2.0              3.0
## 3  virginica              4.9             2.2              4.5
## Variables not shown: Petal.Width_min (dbl), Sepal.Length_max (dbl),
##   Sepal.Width_max (dbl), Petal.Length_max (dbl), Petal.Width_max (dbl)

反馈非常感谢!

这将出现在dplyr 0.2。

答案 1 :(得分:4)

这将使您在dplyr

中几乎一路走来
h = iris %.%
  group_by(Species) %.%
  do(function(d){
    sapply(Filter(is.numeric, d), mean)  
  })

as.data.frame(h)