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

如何在R语言数据框中新增列,标记指定列值是否存在于外部向量

问题:在R语言DataFrame中新增条件判断列in_vector

需求说明:

  • 给DataFrame新增一列in_vector
  • 判断规则:当某一行中任意一个以SR开头的列的值存在于外部向量vector(值为'a','f','m')中时,标记为'Yes',否则为NA

示例数据

vector <- c('a', 'f', 'm')

df <- data.frame(
  COL1 = c(12,76,90,40,34),
  SR3 = c('y','e','a','z','u'),
  SR_op = c('f','r','b','f','v'),
  letter = c('ab','cd','jk','fg','xy'),
  SR_2 = c('m','t','c','4','w'),
  stringsAsFactors = FALSE
)

尝试过的代码

library(dplyr)

df %>% mutate(across(.cols= starts_with('SR'), ~ case_when(. %in% vector ~ 'Yes')))

这段代码的问题是会逐个修改SR开头的列,而非新增一个汇总判断的目标列。

正确解决方案

方法1:使用if_any(推荐,需dplyr 1.0.0及以上版本)

利用if_any直接对行内所有SR开头的列做匹配判断,简洁高效:

library(dplyr)

df %>%
  mutate(in_vector = case_when(
    if_any(starts_with('SR'), ~ .x %in% vector) ~ 'Yes',
    TRUE ~ NA_character_
  ))

方法2:使用rowwise + any(兼容低版本dplyr)

通过行分组后,用any判断行内是否存在符合条件的值:

library(dplyr)

df %>%
  rowwise() %>%
  mutate(in_vector = case_when(
    any(c_across(starts_with('SR')) %in% vector) ~ 'Yes',
    TRUE ~ NA_character_
  )) %>%
  ungroup()

最终输出

COL1 SR3 SR_op letter SR_2 in_vector
1   12   y     f     ab    m       Yes
2   76   e     r     cd    t      <NA>
3   90   a     b     jk    c       Yes
4   40   z     f     fg    4       Yes
5   34   u     v     xy    w      <NA>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 17:17:37