機略戦記

Maneuver warfare

[dplyr] group_byを行う時、集約に使うキーを変数で指定したい。

やりたい事

ここにirisがある。

> head(iris)
  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

これをPetal.Widthgroup_byしてnをカウントしたい時はこうする。

> iris %>% group_by(Petal.Width) %>% summarise(n = n())
Source: local data frame [22 x 2]

   Petal.Width  n
1          0.1  5
2          0.2 29
3          0.3  7
...

今回は、Petal.Widthを使ってgroup_byしたが、これを動的に指定したい。

結論

group_by_を使う + キーは変数に入れておく。

> group_by_key <- "Petal.Width"
> iris %>% group_by_(group_by_key) %>% summarise(n = n())
Source: local data frame [22 x 2]

   Petal.Width  n
1          0.1  5
2          0.2 29
3          0.3  7

このコードで言うところのgroup_by_keyに任意のカラム名を入れる事でgroup_byに使うキーを動的に指定できる。