如何用str_detect在R中筛选同时包含两个字符串的行?
用str_detect实现同时匹配多个字符串的逻辑与筛选
当然可以实现你要的逻辑与筛选,这里提供两种常用方法:
方法1:多次调用str_detect并用逻辑与连接
直接分别检查name列是否包含"won"和"le",再用&(逻辑与)连接两个条件,只有同时满足两个匹配的行才会被保留:
library(dplyr) library(stringr) # 你的实际数据 df <- data.frame( name = c("Cathy le", "won Xion le", "Matt le won", "stephen won", "James Matt"), value = 5:9 ) # 筛选同时包含"won"和"le"的行 filtered_df <- df %>% filter(str_detect(name, "won") & str_detect(name, "le")) # 查看结果 filtered_df
执行后输出符合预期:
name value 1 won Xion le 6 2 Matt le won 7
方法2:使用正则表达式的正向预查
如果你想在单个str_detect调用里实现,可以利用正则的正向预查语法(?=.*匹配内容),多个预查条件并列就表示同时满足所有匹配:
filtered_df <- df %>% filter(str_detect(name, "(?=.*won)(?=.*le)"))
这个正则的意思是:字符串中必须存在任意字符(.*)后跟"won",同时也必须存在任意字符后跟"le",顺序不影响匹配结果,刚好符合你的需求。
为什么之前的won|le不行?
|在正则里是逻辑或,只要字符串包含"won"或者"le"就会被选中,所以会把只含其中一个的行也筛选出来,而我们需要的是同时包含两者的逻辑与,因此需要用上述两种方法实现。
内容的提问来源于stack exchange,提问作者Xion
相关产品推荐
相关产品推荐

