You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 15:05:43