如何使用dplyr将数据框中的数值列映射为分类组
使用dplyr实现数值列到分组的映射
嘿,这事儿用dplyr完全可以轻松搞定!我给你分享两种实用的方案,你可以根据自己的映射复杂程度来选:
方案一:直接用case_when写映射规则
如果你的映射规则比较简单、固定,直接用case_when配合mutate就能快速生成分组列。
举个例子,假设你的原始数据框(图1)是这样的:
library(dplyr) # 模拟图1的数值列数据 df1 <- tibble( 样本ID = 1:6, 数值列 = c(3, 12, 25, 8, 18, 22) )
假设你的映射规则(对应图2)是:
- 数值 ≤10 → 分组"低"
- 10 < 数值 ≤20 → 分组"中"
- 数值 >20 → 分组"高"
那执行下面的代码就能生成分组列:
df_result <- df1 %>% mutate( 分组列 = case_when( 数值列 <= 10 ~ "低", 数值列 <= 20 ~ "中", TRUE ~ "高" # 兜底匹配剩下的所有情况 ) ) # 查看结果 df_result
方案二:用映射表+left_join实现(更灵活)
如果你的映射规则后续可能调整,或者规则比较多,先单独建一个映射表再关联会更方便,不用修改主逻辑代码。
第一步,先创建你的映射规则表(对应图2的分组逻辑):
# 模拟图2的映射规则表 map_table <- tibble( 数值下限 = c(0, 11, 21), 数值上限 = c(10, 20, Inf), 分组 = c("低", "中", "高") )
然后用left_join结合between函数来匹配分组:
df_result <- df1 %>% left_join(map_table, by = character()) %>% # 笛卡尔积关联 filter(between(数值列, 数值下限, 数值上限)) %>% select(样本ID, 数值列, 分组) # 查看结果 df_result
这个方法的好处是,后续要修改分组规则,只要调整map_table就行,主流程代码不用动~
内容的提问来源于stack exchange,提问作者JsW
相关产品推荐
相关产品推荐

