web-dev-qa-db-ja.com

dplyrを使用して、group_by以外のすべての列に関数を適用するにはどうすればよいですか?

Dplyrパッケージを使用して、グループ化されていないdata.frame内のすべての列に関数を適用しようとしています。これは、aggregate()で行います。

_aggregate(. ~ Species, data = iris, mean)
_

ここで、meanは、グループ化に使用されないすべての列に適用されます。 (はい、aggregateを使用できることはわかっていますが、dplyrを理解しようとしています。)

summarizeは次のように使用できます:

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

しかし、mean()の_. ~_表記と同様に、グループ化されていないall列にaggregate()を適用する方法はありますか?集計したい30列のdata.frameがあるので、個々のステートメントを書き出すのは理想的ではありません。

17
kmm

実験的な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)

フィードバックは大歓迎です!

これはdplyr0.2に表示されます。

35
hadley

これにより、dplyrでほぼすべての方法が実行されます。

h = iris %.%
  group_by(Species) %.%
  do(function(d){
    sapply(Filter(is.numeric, d), mean)  
  })

as.data.frame(h)
4
Ramnath