我想计算相对于其余组的相对频率的一组值。例如,计算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