2017-10-13 2 views
0

残りのグループに対する値のグループの相対頻度を計算したいと思います。たとえば、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 

これで出力が異なります。理由は何でしょうか?

+1

要約のsum(N)は、mutateよりも少ない値であり、したがって2回目の試行ではより小さな値になります。最後の行で 'mutate(freq = N/sum(unique)(N))'を試すことはできますが、あまり安全ではない – Sotos

+0

'group_by(am)'は、そのグループでのみカウントするように? 'sum(unique(N))'は本物の重複を逃した、私は同じ頻繁な 'am-gear 'の組み合わせを意味した。数が増加すると、この値のシェアも直線的に増加します。だから、私はそれが相対的な頻度の計算に違いがないと仮定します。 – Prradep

+0

です。しかし、あなたの集団は、要約されているのではなく突然変異の結果であるため、今は大きくなっています。それがrel.freqに違いをもたらす理由。両方のケースであなたの「N」が同じであるからです。 – Sotos

答えて

2

あなたにも午前グループのNのサイズを再計算する必要があります。

mtcars %>% 
    select(am, gear) %>% 
    group_by(am, gear) %>% 
    mutate(N = n()) %>% 
    group_by(am) %>% 
    mutate(freq = N/n()) 

これは期待される結果を得ます

3

より良いオプションは、要約出力(「resを」)とleft_joinだろう

mtcars %>% 
     select(am, gear) %>% 
     left_join(., res) 

我々はsum(N)を見れば、行

のより多くの数があるので、それは少し大きい値であります
+0

あなたの答えに感謝します。しかし、私は基本的に何が問題になったのかを知りたいと思っています。個人的には、私はこの操作のために別のオブジェクト 'res'を作成したくありません。 – Prradep

+0

@Prradep 100行あり、各グループの2番目のケースの要素の総数を合計していますが、最初のアプローチではわずかな行しかありません。 – akrun

+0

数値が増加すると、この値のシェアも直線的に増加します。だから、私はそれが相対的な頻度の計算に違いがないと仮定します。 – Prradep

関連する問題