1. ホーム
  2. r

[解決済み] dplyrによる相対度数/比率の計算

2022-02-16 02:08:53

質問

各グループ内で異なる値の比率を計算したいとします。例えば mtcars のデータは、どのように計算するのでしょうか? 相対 の数の頻度 歯車 によって アム (自動/手動)を一括して dplyr ?

library(dplyr)
data(mtcars)
mtcars <- tbl_df(mtcars)

# count frequency
mtcars %>%
  group_by(am, gear) %>%
  summarise(n = n())

# am gear  n
#  0    3 15 
#  0    4  4 
#  1    4  8  
#  1    5  5 

実現したいこと

am gear  n rel.freq
 0    3 15      0.7894737
 0    4  4      0.2105263
 1    4  8      0.6153846
 1    5  5      0.3846154

解決方法は?

これを試してみてください。

mtcars %>%
  group_by(am, gear) %>%
  summarise(n = n()) %>%
  mutate(freq = n / sum(n))

#   am gear  n      freq
# 1  0    3 15 0.7894737
# 2  0    4  4 0.2105263
# 3  1    4  8 0.6153846
# 4  1    5  5 0.3846154

から dplyrヴィネット :

複数の変数でグループ化した場合、各サマリーはグループ化のレベルを1つずつ剥離していきます。そのため、データセットを段階的にロールアップすることが容易になります。

このように summarise で指定された最後のグループ化変数が group_by の「ギア」が剥がされる。その中で mutate ステップでは、残りのグループ化変数(ここでは'am')によってデータがグループ化されます。各ステップでのグループ化の確認は groups .

ピーリングの結果は、もちろん、グループ化変数の順番に依存します。 group_by を呼び出します。その後に続く group_by(am) のように、より明示的なコードにすることができます。

四捨五入やプリフィケーションについては、@Tyler Rinker さんのナイスアンサーを参照してください。