残りのグループに対する値のグループの相対頻度を計算したいと思います。たとえば、gear==3
の相対頻度をam==0
に計算します。私は以下の方法で計算しました。集約と突然変異を伴う相対的な相対的な周波数出力
library(dplyr)
mtcars %>%
select(am, gear) %>%
group_by(am, gear) %>%
summarise(N = n()) %>%
group_by(am) %>%
mutate(freq = N/sum(N))
# Source: local data frame [4 x 4]
# Groups: am [2]
#
# # A tibble: 4 x 4
# am gear N freq
# <dbl> <dbl> <int> <dbl>
# 1 0 3 15 0.7894737
# 2 0 4 4 0.2105263
# 3 1 4 8 0.6153846
# 4 1 5 5 0.3846154
上記の出力は期待どおりです。しかし、同じ値を持つ元のデータセットの新しい列としてfreq
の値を使用したいと思います。私は、数値Ǹ
を計算し、次に相対周波数freq
を計算するために以下の方法を試しました。
mtcars %>%
select(am, gear) %>%
group_by(am, gear) %>%
mutate(N = n()) %>%
group_by(am) %>%
mutate(freq = N/sum(N))
# Source: local data frame [32 x 4]
# Groups: am [2]
#
# # A tibble: 32 x 4
# am gear N freq
# <dbl> <dbl> <int> <dbl>
# 1 1 4 8 0.08988764
# 2 1 4 8 0.08988764
# 3 1 4 8 0.08988764
# 4 0 3 15 0.06224066
# 5 0 3 15 0.06224066
# 6 0 3 15 0.06224066
# 7 0 3 15 0.06224066
# 8 0 4 4 0.01659751
# 9 0 4 4 0.01659751
# 10 0 4 4 0.01659751
# # ... with 22 more rows
これで出力が異なります。理由は何でしょうか?
要約のsum(N)は、mutateよりも少ない値であり、したがって2回目の試行ではより小さな値になります。最後の行で 'mutate(freq = N/sum(unique)(N))'を試すことはできますが、あまり安全ではない – Sotos
'group_by(am)'は、そのグループでのみカウントするように? 'sum(unique(N))'は本物の重複を逃した、私は同じ頻繁な 'am-gear 'の組み合わせを意味した。数が増加すると、この値のシェアも直線的に増加します。だから、私はそれが相対的な頻度の計算に違いがないと仮定します。 – Prradep
です。しかし、あなたの集団は、要約されているのではなく突然変異の結果であるため、今は大きくなっています。それがrel.freqに違いをもたらす理由。両方のケースであなたの「N」が同じであるからです。 – Sotos