以下を含むグループテーブルごとの要約を取得する効率的な方法を見つけることに興味があります。
- グループごとの一意の値のカウント
- 選択した変数の記述統計量のプリミティブ セット
たとえば、記述統計を生成する場合、次のコードを使用しています。
data("mtcars")
require(dplyr)
mt_sum <- mtcars %>%
group_by(cyl) %>%
summarise_each(funs(min,max), hp, wt, disp)
これにより、目的の出力が生成されます。
> head(mt_sum)
Source: local data frame [3 x 7]
cyl hp_min wt_min disp_min hp_max wt_max disp_max
(dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl)
1 4 52 1.513 71.1 113 3.190 146.7
2 6 105 2.620 145.0 175 3.460 258.0
3 8 150 3.170 275.8 335 5.424 472.0
各グループごとの値の数を反映する図でデータを充実させることに興味があります。カウントに関しては、これは簡単に実行できます。
mt_sum2 <- mtcars %>%
group_by(cyl) %>%
summarise(countObs = n())
これにより、必要なデータが生成されます。
> head(mt_sum2)
Source: local data frame [3 x 2]
cyl countObs
(dbl) (int)
1 4 11
2 6 7
3 8 14
問題
この問題は、両方の変換を同時に適用したい場合に発生します。
試行 1
たとえば、コード:
mt_sum <- mtcars %>%
group_by(cyl) %>%
summarise_each(funs(min,max), hp, wt, disp) %>%
summarise(countObs = n())
生成されます:
Source: local data frame [3 x 2]
cyl countObs
(dbl) (int)
1 4 11
2 6 7
3 8 14
以前に生成された記述統計なし。
試行 2
コード:
mt_sum <- mtcars %>%
group_by(cyl) %>%
summarise_each(funs(min,max,n), hp, wt, disp)
失敗すると予想されます:
Error: n does not take arguments
試行 3 (動作中)
コード:
data("mtcars")
require(dplyr)
mt_sum <- mtcars %>%
group_by(cyl) %>%
summarise_each(funs(min,max), hp, wt, disp) %>%
left_join(y = data.frame(
"Var1" = as.numeric(as.character(as.data.frame(table(mtcars$cyl))$Var1)),
"Count" = as.character(as.data.frame(table(mtcars$cyl))$Freq)),
by = c("cyl" = "Var1"))
必要なデータを提供します:
> head(mt_sum)
Source: local data frame [3 x 8]
cyl hp_min wt_min disp_min hp_max wt_max disp_max Count
(dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (dbl) (fctr)
1 4 52 1.513 71.1 113 3.190 146.7 11
2 6 105 2.620 145.0 175 3.460 258.0 7
3 8 150 3.170 275.8 335 5.424 472.0 14
これは、この要約を作成する非常に非効率的な方法だと思います。特に、大きなテーブルを操作する場合、その場でオブジェクトを作成するのは非効率的です。同じ結果を達成することに興味がありますが、マージのためだけにオブジェクトを作成する必要のない、より効率的な方法です。特に、私がやりたいことdplyr
は、テーブルの以前のバージョンから追加の要約を導出することに対応します。例えば:
- グループ
- 記述統計を作成する
- グループ化したらデータに戻る
- いくつかの追加の統計を生成し、最終データに追加します