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

如何通过多变量OR条件快速生成性别暴力受害标识新变量

最优实现方案(dplyr 1.0.0及以上版本)

直接使用dplyr内置的if_any()函数,可批量匹配指定范围内的变量,逐行判断是否存在至少一个变量满足取值为1的条件:

不同变量选择场景的写法:

  • 如果所有暴力指标变量都是以固定前缀命名(比如均为v开头,对应v1到v70):
library(dplyr)
base <- base %>% 
  mutate(`some point in life` = as.integer(if_any(starts_with("v"), ~.x == 1)))
  • 如果暴力指标是连续的列范围(比如从第2列到第71列,或者变量名从v1连续到v70):
base <- base %>% 
  mutate(`some point in life` = as.integer(if_any(v1:v70, ~.x == 1)))
  • 如果变量分为两类命名规则(比如过去12个月的指标前缀为past_,12个月之前的前缀为before_):
base <- base %>% 
  mutate(`some point in life` = as.integer(if_any(c(starts_with("past_"), starts_with("before_")), ~.x == 1)))

if_any会返回逻辑值TRUE/FALSE,转成integer后正好对应1/0,完全符合你的判定规则,不需要手动罗列70个变量。如果指标存在缺失值,可在判断条件中加na.rm = TRUE避免结果返回NA:

mutate(`some point in life` = as.integer(if_any(v1:v70, ~.x == 1, na.rm = TRUE)))

旧版本dplyr兼容方案

如果你的dplyr版本低于1.0.0没有if_any函数,可以用rowwise() + c_across()实现:

base <- base %>%
  rowwise() %>%
  mutate(`some point in life` = as.integer(any(c_across(v1:v70) == 1, na.rm = TRUE))) %>%
  ungroup()

该方案为逐行运算,数据量较大时性能低于if_any方案,优先推荐前者。

内容的提问来源于stack exchange,提问作者BENJAMIN CERPA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 07:15:06