如何基于变量条件合并观测值:观测数不足150时并入下一组
处理因子组合并的方案
假设你的数据框名为df,level2是取值1-5的因子变量,以下是实现观测数不足150的组并入下一组的具体步骤:
1. 统计各组观测数
先用dplyr统计每个level2水平的样本量:
library(dplyr) group_counts <- df %>% count(level2, name = "sample_count")
2. 构建组映射关系
把因子转换为数值方便遍历检查,然后从前往后判断每个组是否需要合并到下一组:
# 转换为数值型水平 group_counts <- group_counts %>% mutate(level_num = as.numeric(as.character(level2))) # 初始化映射表:默认保留原组 level_mapping <- group_counts %>% select(level2, level_num) %>% mutate(new_level = level_num) # 遍历检查并更新映射 for (i in 1:(nrow(group_counts)-1)) { if (group_counts$sample_count[i] < 150) { level_mapping$new_level[i] <- level_mapping$new_level[i+1] } }
3. 应用映射到原数据框
将原数据的level2替换为合并后的组,最后转回因子类型:
df <- df %>% mutate(level_num = as.numeric(as.character(level2))) %>% left_join(level_mapping, by = "level_num") %>% mutate(level2 = factor(new_level)) %>% select(-level_num, -new_level)
补充说明
- 如果遇到连续多个组样本量都不足150的情况(比如level1有100个、level2有120个),这两个组都会被合并到level3
- 最后一组(level5)如果样本量不足150,上述代码会保留该组;如果需要合并到前一组,可以修改循环逻辑,从倒数第二组往前检查
内容的提问来源于stack exchange,提问作者statquest
相关产品推荐
相关产品推荐

