关于forcats::fct_lump_prop()的w与prop参数用法及阈值疑问
解决fct_lump_prop()的w和prop参数困惑
首先明确核心问题:你之前调用fct_lump_prop()时没有指定w = var2参数,导致函数默认按观测计数(而非var2的权重)计算类别占比——此时a和b各有3条观测,占比都是50%,自然无法实现只合并b的效果。
参数逻辑解析
w:必须传入你用来计算权重的变量(这里是var2),函数才会按每个类别的权重总和计算占比,而不是按观测数量。prop:函数会从权重占比最大的类别开始保留,直到保留的类别总权重占比≥prop。简单说,只要保留的最大类别单独的权重占比≥prop,就只会保留这个类别,其他都合并为Others。
针对你的数据的解决方案
你的数据中,a的总权重是0.2+0.3+0.2=0.7,b的总权重是0.1*3=0.3,总权重和为1。要只保留a,只需设置prop为大于0.3且小于0.7的任意值(比如0.6),同时指定w=var2:
library(forcats) library(tibble) df <- tibble(var1 = c(rep("a", 3), rep("b", 3)), var2 = c(0.2, 0.3, 0.2, 0.1, 0.1, 0.1)) # 生成目标结果 df <- df %>% mutate(fct = fct_lump_prop(var1, prop = 0.6, w = var2))
运行后得到你想要的结果:
# A tibble: 6 × 3 var1 var2 fct <chr> <dbl> <fct> 1 a 0.2 a 2 a 0.3 a 3 a 0.2 a 4 b 0.1 Others 5 b 0.1 Others 6 b 0.1 Others
你之前尝试无效的原因
- 未指定
w=var2时,函数默认每个观测权重为1,a和b的计数占比都是50%:- 当
prop在0.3-0.6之间时,两个类别的累加占比(50%或100%)都≥prop,所以不会合并; - 当
prop=0.7时,单个类别的占比(50%)<0.7,所有类别都被合并为Others。
- 当
内容的提问来源于stack exchange,提问作者Michaël
相关产品推荐
相关产品推荐

