【发布时间】:2020-08-11 12:24:51
【问题描述】:
我正在尝试根据聚合变量在每个组中找到前 3 个因子水平,并将剩余的因子水平分组为每个组的“其他”。通常我会为此使用 fct_lump_n,但我不知道如何让它在每个组中工作。 这是一个示例,我想根据 x 变量形成组,根据 z 的值对 y 变量进行排序,选择前 3 个 y 变量,并将其余的 y 分组为“其他”:
set.seed(50)
df <- tibble(x = factor(sample(letters[18:20], 100, replace = T)),
y = factor(sample(letters[1:10], 100, replace = T)),
z = sample(100, 100, replace = T))
我试过这样做:
df %>%
group_by(x) %>%
arrange(desc(z), .by_group = T) %>%
slice_head(n = 3)
返回这个:
# A tibble: 9 x 3
# Groups: x [3]
x y z
<fct> <fct> <int>
1 r i 95
2 r c 92
3 r a 88
4 s g 94
5 s g 92
6 s f 92
7 t j 100
8 t d 93
9 t i 81
这基本上是我想要的,但是我缺少 r、s 和 t 中的“其他”变量,它收集了尚未计算的 z 的值。
我可以为此使用 fct_lump_n 吗?还是 slice_head 结合将排除的变量分组为“其他”?
【问题讨论】: