R语言如何用条件判断按优先级合并两个变量生成新变量
实现方法
你可以用以下两种常见方案实现需求:
1. 基础R实现
不需要额外安装加载包,直接用向量化ifelse()函数即可,注意不要用逐行判断的if(){}流程控制语句,前者适配向量/列运算,效率更高:
df$exp_illness <- ifelse(df$pers_illness != "None", df$pers_illness, df$fam_illness)
2. Tidyverse(dplyr)实现
如果你常用tidyverse生态的语法,可以用if_else()或者更简洁的coalesce()函数实现:
library(dplyr) # 方案A:if_else实现,语法更清晰 df <- df %>% mutate(exp_illness = if_else(pers_illness != "None", pers_illness, fam_illness)) # 方案B:coalesce实现(适合多优先级字段合并场景扩展) df <- df %>% # 先把占位的"None"转为NA mutate(across(c(pers_illness, fam_illness), ~na_if(., "None")), # 取第一个非NA的取值,按优先级顺序传参即可 exp_illness = coalesce(pers_illness, fam_illness), # 可选:如果需要把NA还原回"None"字符串,保留原有字段格式 across(everything(), ~replace(., is.na(.), "None")))
输出验证
运行任意上述代码后,得到的df数据框与你期望的结果完全一致:
| pers_illness | fam_illness | exp_illness |
|---|---|---|
| Personal experience with illness | Familial experience | Personal experience with illness |
| Personal experience with illness | None | Personal experience with illness |
| None | Familial experience | Familial experience |
| None | None | None |
内容的提问来源于stack exchange,提问作者n23
相关产品推荐
相关产品推荐

