将R中不太常见的因子级别合并到“其他”中
我有一个数据框,其中包含一个 State 列,其中包含所有州的值(“阿拉巴马州、阿拉斯加州等)
有没有一种快速的方法来选择前 10 个更频繁的状态,并用“其他”替换所有其他状态
我通过在州一级按频率进行总结来做到这一点,创建一个指标
mutate(bottom_40 = ifelse frequency < x, TRUE,FALSE),
然后加入并使用逻辑将所有状态替换为“其他”的指示符。
这个解决方案很难看,如果有人能分享一种更干净的方法来做到这一点,我将不胜感激。
回答
fct_lump_nfromforcats可以在这里提供帮助。考虑这个例子:
library(dplyr)
library(forcats)
df <- data.frame(col = factor(rep(LETTERS[1:9],
times = c(40, 10, 5, 27, 1, 1, 1, 1, 1))))
df %>% count(col)
# col n
#1 A 40
#2 B 10
#3 C 5
#4 D 27
#5 E 1
#6 F 1
#7 G 1
#8 H 1
#9 I 1
让我们只保留前 3 个级别并将其余级别更改为“其他”。
df %>%
mutate(col = fct_lump_n(col, 3)) %>%
count(col)
# col n
#1 A 40
#2 B 10
#3 D 27
#4 Other 10