基于另一列的集总系数

Pet*_*ter 2 r tidyverse forcats

该示例显示了不同工厂生产产出的测量结果,其中第一列表示工厂,最后一列表示生产量。

factory <- c("A","A","B","B","B","B","B","C","D")
production <- c(15, 2, 1, 1, 2, 1, 2,20,5)
df <- data.frame(factory, production)
df
  factory production
1       A         15
2       A          2
3       B          1
4       B          1
5       B          2
6       B          1
7       B          2
8       C         20
9       D          5
Run Code Online (Sandbox Code Playgroud)

现在,我想根据该数据集中的总产量将工厂分为更少的级别。

使用正常的 forcats::fct_lump,我可以将它们按 thy 出现的行数进行集中,例如用于制作 3 个级别:

library(tidyverse)    
df %>% mutate(factory=fct_lump(factory,2))
      factory production
    1       A         15
    2       A          2
    3       B          1
    4       B          1
    5       B          2
    6       B          1
    7       B          2
    8   Other         20
    9   Other          5
Run Code Online (Sandbox Code Playgroud)

但我想根据总和(产量)对它们进行汇总,保留前 n=2 个工厂(按总产量)并将其余工厂汇总。期望的结果:

1       A         15
2       A          2
3   Other          1
4   Other          1
5   Other          2
6   Other          1
7   Other          2
8       C         20
9   Other          5
Run Code Online (Sandbox Code Playgroud)

有什么建议么?

谢谢!

tip*_*ull 5

只需指定权重参数w

> df %>% 
+   mutate(factory = fct_lump_n(factory, 2, w = production))
  factory production
1       A         15
2       A          2
3   Other          1
4   Other          1
5   Other          2
6   Other          1
7   Other          2
8       C         20
9   Other          5
Run Code Online (Sandbox Code Playgroud)

注意:使用是因为不再推荐使用forcats::fct_lump_n泛型。fct_lump