R语言dplyr按Comparison列起始字符筛选数据行的实现问题
问题原因
当前使用的str_detect(Comparison, "Cx")为全局匹配逻辑,只要字符串任意位置出现"Cx"就会触发匹配,无位置限制,因此筛选C2时,字符串C1_C2中间包含的"C2"会被误识别,不符合仅匹配指定前缀的筛选要求。
正确实现方法
正则表达式中通过^标识匹配字符串的起始位置,配合下划线锁定Cx_的完整前缀格式,即可实现仅匹配开头对应记录的需求:
- 基础单组筛选写法(以筛选C2为例):
C2 <- comparsion %>% filter(str_detect(Comparison, "^C2_"))
运行后将仅返回行号6-9的4条C2开头的记录,不会误匹配C1_C2这类中间含C2的条目。
- 批量生成C1-C6全部分组的写法:
library(dplyr) library(stringr) library(purrr) # 自动为每个Cx生成对应筛选结果 result_list <- map(set_names(paste0("C", 1:6)), ~ comparsion %>% filter(str_detect(Comparison, str_c("^", .x, "_"))))
上述写法不受原始Comparison值末尾附带空格的影响,可正常匹配目标条目。
内容的提问来源于stack exchange,提问作者PesKchan
相关产品推荐
相关产品推荐

