我有一个分类变量的数据框,我已将其分成几组,并得到每组的计数。
My original data nyD looks like:
Source: local data frame [7 x 3]
Groups: v1, v2, v3
v1 v2 v3
1 a plus yes
2 a plus yes
3 a minus no
4 b minus yes
5 b x yes
6 c x notk
7 c x notk
I performed the following operations using dplyr:
ny1 <- nyD %>% group_by(v1,v2,v3)%>%
summarise(count=n()) %>%
mutate(prop = count/sum(count))
My data "ny1" looks like:
Source: local data frame [5 x 5]
Groups: v1, v2
v1 v2 v3 count prop
1 a minus no 1 1
2 a plus yes 2 1
3 b minus yes 1 1
4 b x yes 1 1
5 c x notk 2 1
我想计算prop变量中V1组的相对频率。 prop变量应该是相应的计数除以“V1组的计数总和”。 V1组总共有3“a”,2“b”和1“c”。也就是说,ny1 $ prop [1]&lt; - 1/3,ny1 $ prop [2]&lt; - 2/3 .... 使用count / sum(count)的mutate操作不正确。我需要指定总和应仅归入V1组。 有没有办法使用dplyr来实现这个目标?
答案 0 :(得分:6)
您可以一步完成这一切(从原始数据nyD
开始,而不创建ny1
)。这是因为当您在mutate
之后运行summarise
时,dplyr
默认会丢弃一个聚合级别(v2
)(当然我dplyr
中最喜欢的功能)并且仅由v1
nyD %>%
group_by(v1, v2) %>%
summarise(count = n()) %>%
mutate(prop = count/sum(count))
# Source: local data frame [5 x 4]
# Groups: v1
#
# v1 v2 count prop
# 1 a minus 1 0.3333333
# 2 a plus 2 0.6666667
# 3 b minus 1 0.5000000
# 4 b x 1 0.5000000
# 5 c x 2 1.0000000
或使用count
的较短版本(感谢@beginneR)
df %>%
count(v1, v2) %>%
mutate(prop = n/sum(n))