使用recode或case_when合并HIV风险变量并筛选数据集求助
基于OR逻辑筛选HIV风险样本的R代码方案
以下是几种直接可行的实现方式,针对不同的变量编码场景:
场景1:风险变量为"Yes"/"No"字符型
假设你的数据集名为df,四个风险变量分别是risk1、risk2、risk3、risk4,取值为"Yes"(有风险)或"No"(无风险),直接用filter结合逻辑或运算符|即可完成筛选:
library(dplyr) # 保留至少有一项风险的样本 df_risk_subset <- df %>% filter(risk1 == "Yes" | risk2 == "Yes" | risk3 == "Yes" | risk4 == "Yes")
场景2:风险变量为二进制数值型(1=有风险,0=无风险)
如果变量是1/0编码,可通过求和简化条件,只要总和大于0就说明存在至少一项风险:
df_risk_subset <- df %>% filter(risk1 + risk2 + risk3 + risk4 > 0)
用case_when先标记再筛选(兼容多种编码)
如果需要先创建一个"是否有风险"的标记变量,再筛选,可使用case_when:
df_risk_subset <- df %>% mutate(has_any_risk = case_when( # 这里替换成你的实际风险判断条件 risk1 == "Yes" | risk2 == "Yes" | risk3 == "Yes" | risk4 == "Yes" ~ TRUE, # 其余情况(无任何风险)标记为FALSE TRUE ~ FALSE )) %>% filter(has_any_risk)
常见问题排查
如果之前的代码失效,大概率是这几个原因:
- 误用了逻辑与
&而非逻辑或| - 变量取值不统一(比如有的是小写
"yes",有的是大写"Yes",可先用str_to_upper()统一格式) - 未处理缺失值:如果存在NA,可在条件中加入
is.na(riskX)(根据需求决定是否将缺失视为有风险)
内容的提问来源于stack exchange,提问作者Sabrina
相关产品推荐
相关产品推荐

