在R的dplyr中使用group_by时如何合并因子水平
在group_by()中直接合并指定外的因子水平为"other"
完全可以在group_by()中直接实现,不用提前修改原数据框的因子水平。下面用两种实用方法演示,基于tidyverse工具链:
方法1:用case_when()直接分组替换
适合不需要严格保留因子属性的场景,直接在group_by()内生成新的分组列:
library(dplyr) # 构造示例数据 set.seed(123) df <- tibble( group = factor(sample(c("A", "B", "C"), 100, replace = TRUE)), value = rnorm(100) ) # 直接在group_by中合并非指定水平 df %>% group_by(group = case_when( group %in% c("A", "B") ~ as.character(group), # 保留指定水平 TRUE ~ "other" # 其余合并为other )) %>% summarise( 均值 = mean(value), 样本量 = n() )
方法2:用forcats::fct_other()处理因子(推荐)
如果你的分组列是因子类型,用forcats包的fct_other()更专业,能保留因子特性且代码更简洁:
library(dplyr) library(forcats) df %>% group_by(group = fct_other( group, keep = c("A", "B"), # 指定要保留的因子水平 other_level = "other" # 合并后的名称 )) %>% summarise( 均值 = mean(value), 样本量 = n() )
两种方法都不需要提前修改原数据框,直接在分组步骤完成合并逻辑,结果会保留指定水平,其余归为"other"后再做汇总计算。
内容的提问来源于stack exchange,提问作者Vanessa Han
相关产品推荐
相关产品推荐

