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

R语言中如何在case_when内判断指定行范围是否存在值为1的元素

实现方案

方案1:沿用rowSums写法(改动最小,兼容原有逻辑)

你只需要在原有代码的基础上增加等于1的判断逻辑即可,生成的布尔值可以直接放到case_when中作为条件使用:

rowSums(select(., starts_with('type')) == 1, na.rm = TRUE) > 0

逻辑说明:先将所有type开头的列和1做等值判断,等于1的返回TRUE(对应数值1),其余返回FALSE(对应数值0),按行求和后大于0即说明该行存在至少一个值为1的元素。


方案2:使用rowwise+any写法(可读性更高)

如果使用dplyr 1.0.0及以上版本,可以用更直观的逐行判断逻辑:

  • 单独生成判断列的写法:
df %>%
  rowwise() %>%
  mutate(has_one = any(c_across(starts_with('type')) == 1, na.rm = TRUE))
  • 直接放到case_when中作为条件的写法:
df %>%
  rowwise() %>%
  mutate(
    结果列 = case_when(
      any(c_across(starts_with('type')) == 1, na.rm = TRUE) ~ TRUE,
      TRUE ~ FALSE
    )
  )

逻辑说明:c_across会按行选取所有type开头的列,any函数直接判断选中的元素中是否存在至少一个符合等于1的条件。


注意事项

  • 两个方案都保留了na.rm = TRUE参数,遇到NA值会自动忽略,不会因为行内存在NA返回NA结果
  • 如果你的type开头的列是字符类型,需要先转为数值类型再做判断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:00:05