R语言基于数据框两列信息创建新列 实现指定值提取映射
问题根源
原代码对B列的处理逻辑不符合规则:你直接用正则从B列字符串中提取emp|man子串,但B列的floor取值里根本不存在man字符片段,自然提取结果为NA,无法得到预期的man返回值。
修正代码
按照你定的优先级规则,A列优先做正则提取,A列无匹配时对B列做精确值映射即可,不要对B列用正则模糊提取:
library(dplyr) library(stringr) df <- df %>% mutate( C = coalesce( # 第一步:优先提取A列中的emp/man str_extract(A, "emp|man"), # 第二步:A列无匹配时,按B列固定映射规则取值 case_when( B == "employee" ~ "emp", B == "floor" ~ "man" ) ) )
效果说明
- 完全遵循优先级:A列能提取到emp/man时,直接用A列结果,不会读取B列
- B列处理用精确值匹配,不会出现floor无法匹配到man的问题
- 只要你的B列取值仅包含
employee/floor两类,最终C列不会出现任何NA值,可以运行sum(is.na(df$C))验证,返回值为0即符合要求。
内容的提问来源于stack exchange,提问作者user2845095
相关产品推荐
相关产品推荐

