如何基于变量列表中任意变量的阳性结果创建新条件变量
R 实现多变量判断生成新条件变量的解决方案
需求规则
你需要生成的新变量逻辑为:指定变量组中只要有一个取值为1(阳性),新变量就为1;所有指定变量取值均为0(阴性)时新变量为0,对应逻辑真值表如下:
| variable 1 | variable 2 | variable 3 | New variable |
|---|---|---|---|
| 1 | 0 | 0 | 1 |
| 0 | 0 | 1 | 1 |
| 0 | 1 | 1 | 1 |
| 0 | 0 | 0 | 0 |
实现代码
方法1:rowSums实现(更简洁,适配多变量场景)
不需要逐个写变量判断逻辑,尤其适合需要判断的变量数量多的场景:
library(dplyr) # 替换代码中的var1、var2、var3为你实际的变量名即可 df <- df %>% mutate( new_var = as.integer(rowSums(select(., var1, var2, var3), na.rm = TRUE) > 0) )
如果需要判断的变量有统一命名规则,还可以用starts_with("xxx")、contains("xxx")等选择器批量选取变量,不需要逐个列变量名。
方法2:case_when实现(适配你之前尝试的写法)
你之前用case_when失败大概率是逻辑运算符用错,正确写法如下:
library(dplyr) df <- df %>% mutate( new_var = case_when( var1 == 1 | var2 == 1 | var3 == 1 ~ 1, TRUE ~ 0 ) )
注意逐行判断的或逻辑要使用单竖线|,不要写成双竖线||(双竖线是标量逻辑运算符,不支持数据框逐行计算)。
内容的提问来源于stack exchange,提问作者kenglish95
相关产品推荐
相关产品推荐

