如何筛选包含指定向量元素的tibble数据行?
解决tibble部分匹配筛选问题
问题核心
filter(A %in% mychoice)仅支持完全字符串匹配,而你需要筛选A列中包含mychoice任意元素的行,因此得用正则表达式实现部分匹配,同时要处理大小写差异(比如Small Change和Small change)。
解决方案
方法1:拼接正则表达式批量匹配
把mychoice里的元素用|拼接成正则规则,结合str_detect和忽略大小写参数完成匹配:
library(tidyverse) mytibble <- tibble(A = c("Big Change", "Small change, New value, Strange Value", "NA-Value")) mychoice <- c("Small Change", "NA-Value") # 筛选包含mychoice任意元素的行(忽略大小写) mytibble %>% filter(str_detect(A, regex(str_c(mychoice, collapse = "|"), ignore_case = TRUE)))
方法2:逐元素检查匹配状态
用purrr::map_lgl遍历每行字符串,判断是否匹配mychoice中的任意元素:
mytibble %>% filter(map_lgl(A, ~ any(str_detect(.x, regex(mychoice, ignore_case = TRUE)))))
结果说明
两种方法都会返回以下两行:
# A tibble: 2 × 1 A <chr> 1 Small change, New value, Strange Value 2 NA-Value
内容的提问来源于stack exchange,提问作者arnyeinstein
相关产品推荐
相关产品推荐

