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

基于ID判断V1-V3列是否均含1,生成check变量的R语言求助

问题:按ID判断多列是否均含1并生成check变量

需求说明

要创建取值为1/0的变量check,规则为:针对每个ID,判断其对应的V1至V3列中是否每一列都至少存在一个值为1,满足则赋值1,否则赋值0。

原始数据框

DF <- data.frame (ID= c(1,1,1,2,3,3,4,5,5,6), V1= c(1,0,0,1,1,0,0,1,0,0), 
V2= c(1,1,0,0,1,0,1,1,0,0), V3= c(0,1,0,1,0,0,0,0,1,0))

错误代码及问题

使用以下dplyr代码时,group_by未按预期生效,仅按行判断是否存在非0值,未实现按ID整体判断各列是否均含1的逻辑:

DF %>% dplyr::group_by(ID) %>% 
dplyr::mutate(Check= case_when(if_any('V1':'V3',~.x!=0)~1,TRUE ~0)) %>% 
dplyr::ungroup()

期望输出

IDV1V2V3check
11101
10111
10001
21010
31100
30000
40100
51101
50011
60000

修正后的代码及解释

通过if_all结合any实现分组内的列级判断,再将布尔结果转为1/0数值:

DF %>%
  dplyr::group_by(ID) %>%
  dplyr::mutate(
    check = as.integer(
      if_all(V1:V3, ~ any(.x == 1))
    )
  ) %>%
  dplyr::ungroup()
  • if_all(V1:V3, ~ any(.x ==1)):对每个ID分组,检查V1到V3的每一列是否都至少存在一个1,返回布尔值
  • as.integer():将布尔值转换为1(TRUE)或0(FALSE),生成符合要求的check变量

执行后同一ID的所有行将获得相同的check值,完全匹配需求逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 13:46:04