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

如何用dplyr判断拆分后列表的每个元素是否含指定子串?

用dplyr实现需求的方案

当然可以用dplyr结合stringr来实现,具体步骤如下:

首先加载需要的包:

library(dplyr)
library(stringr)

定义你的数据:

string <- c("ABC, BCD, DAB", "BCA, CDA, ABDA")
s1 <- "AB"
s2 <- "CD"

接下来通过dplyr的链式操作完成判断:

result <- tibble(original = string) %>%
  # 给每个原始字符串添加索引,方便后续分组
  mutate(id = row_number()) %>%
  # 按", "拆分字符串,把每个子元素拆成单独一行
  separate_rows(original, sep = ", ") %>%
  # 判断每个子元素是否包含s1或s2
  mutate(contains_target = str_detect(original, s1) | str_detect(original, s2)) %>%
  # 按原始字符串的索引分组
  group_by(id) %>%
  # 检查组内所有子元素都满足条件(即所有contains_target都是TRUE)
  summarise(all_match = all(contains_target)) %>%
  # 提取最终的逻辑结果向量
  pull(all_match)

result
#> [1]  TRUE FALSE

代码说明:

  • tibble(original = string):把原始字符串向量转换成dplyr友好的数据框格式
  • mutate(id = row_number()):添加行号作为分组依据,确保后续能对应回原始的每个字符串
  • separate_rows(...):将每个逗号分隔的字符串拆分成多行,每个子元素单独占一行
  • str_detect(original, s1) | str_detect(original, s2):判断当前子元素是否包含s1或s2
  • group_by(id):按原始字符串的索引分组,确保我们是对每个原始字符串的所有子元素进行判断
  • all(contains_target):检查组内所有子元素的判断结果是否都是TRUE,只要有一个是FALSE,整个组就返回FALSE
  • pull(all_match):把最终的判断结果提取成向量,和你预期的输出一致

内容的提问来源于stack exchange,提问作者Jirka Čep

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 11:04:57