在R中无需枚举所有变量,满足任一条件时生成新变量outcome
解决方案
你的代码存在两个核心问题:
- 逻辑判断写法错误:
~ .x == "consented now"| "consented later"里的| "consented later"是无效写法,R会把非空字符串直接判定为TRUE,导致所有行都会被误判。正确逻辑应该是判断.x是否等于两个目标值之一,用%in%能更简洁实现。 case_when未定义else分支,不符合条件的行outcome会变成NA,而非你需要的0。
另外,如果你不想手动枚举变量,可以用列选择器直接匹配目标列,不用提前定义vars向量:
方法1:检查所有列
dat1 <- dat1 %>% mutate(outcome = case_when( if_any(everything(), ~ .x %in% c("consented now", "consented later")) ~ 1, TRUE ~ 0 ))
方法2:检查特定前缀的列(比如a开头的列)
如果只需要检查a1-a4这类前缀为a的列,用starts_with("a")更精准:
dat1 <- dat1 %>% mutate(outcome = case_when( if_any(starts_with("a"), ~ .x %in% c("consented now", "consented later")) ~ 1, TRUE ~ 0 ))
运行后最终数据集结果:
# A tibble: 4 × 5 a1 a2 a3 a4 outcome <chr> <chr> <chr> <chr> <dbl> 1 consented now "" NA NA 1 2 NA Refused consented now NA 1 3 NA "" NA NA 0 4 NA "" NA consented later 1
内容的提问来源于stack exchange,提问作者Faith Magut
相关产品推荐
相关产品推荐

