使用dplyr
创建总相对频率表并按两个变量分组时,我得到了意外的结果。这是一个示例:
set.seed(1234)
dat1 = data.frame(
color = c(c(rep("red", 4), rep("green", 4))),
type = c(c(rep(c(
"big", "small"
), 4))),
value = sample(1:6, 8, replace = T)
)
dat1 %>% group_by(color, type) %>% summarise(n = n()) %>%
mutate(total = sum(n), rel.freq = n / total)
这是前面代码的结果:
# A tibble: 4 x 5
# Groups: color [2]
color type n total rel.freq
<fct> <fct> <int> <int> <dbl>
1 green big 2 4 0.500
2 green small 2 4 0.500
3 red big 2 4 0.500
4 red small 2 4 0.500
但是我期望这样:
# A tibble: 4 x 5
# Groups: color [2]
color type n total rel.freq
<fct> <fct> <int> <int> <dbl>
1 green big 2 8 0.250
2 green small 2 8 0.250
3 red big 2 8 0.250
4 red small 2 8 0.250
任何了解以下dplyr
管道上的突变为何仅按第一个分组变量进行分组的原因(或为何对其进行分组的任何原因-我的想法是应该在summarise()
上工作数据集)。
total
列应指示总共有8个案例(即,sum(n)
中先前结果中的summarise()
应该= 8
)。
答案 0 :(得分:3)
在每个summarise
之后,一个分组元素将被删除,即该顺序的最后一个分组。我们需要在ungroup
summarise
dat1 %>%
group_by(color, type) %>%
summarise(n = n()) %>%
ungroup %>%
mutate(total = sum(n), rel.freq = n / total)
# A tibble: 4 x 5
# color type n total rel.freq
# <fct> <fct> <int> <int> <dbl>
#1 green big 2 8 0.25
#2 green small 2 8 0.25
#3 red big 2 8 0.25
#4 red small 2 8 0.25