我想計算相對於其餘組的相對頻率的一組值。例如,計算am==0
中gear==3
的相對頻率。我使用以下方式計算。incurbtent相對頻率輸出與總結和變異
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小,因此第二次嘗試的值要小得多。你可以在最後一行嘗試'mutate(freq = N/sum(unique(N)))'但它不是很安全 – Sotos
'group_by(am)'不會限制它只在該組中進行計數? 'sum(unique(N))'錯過了真正的重複,我的意思是頻繁的'am-gear'組合。隨着數量的增加,即使這個數值的份額線性增加。所以,我認爲它在相對頻率計算中沒有區別。 – Prradep
它的確如此。但是你們的小組現在變得更大,因爲它們是變異而不是總結的結果。它在rel.freq中有所不同的原因。是因爲你的'N'在兩種情況下都是一樣的 – Sotos