首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用具有多个模式的字符向量的grep

使用具有多个模式的字符向量的grep
EN

Stack Overflow用户
提问于 2011-09-29 20:48:53
回答 10查看 270.6K关注 0票数 150

我正在尝试使用grep来测试字符串向量是否存在于另一个向量中,并输出存在的值(匹配模式)。

我有一个这样的数据框架:

FirstName Letter   
Alex      A1
Alex      A6
Alex      A7
Bob       A1
Chris     A9
Chris     A6

我在"Letter“列中有一个字符串模式的向量,例如:c("A1", "A9", "A6")

我想检查模式向量中的字符串是否出现在"Letter“列中。如果是这样,我希望得到唯一值的输出。

问题是,我不知道如何在多个模式中使用grep。我试过了:

matches <- unique (
    grep("A1| A9 | A6", myfile$Letter, value=TRUE, fixed=TRUE)
)

但是它给了我0个匹配,这不是真的,有什么建议吗?

EN

回答 10

Stack Overflow用户

发布于 2011-10-06 00:35:30

除了@Marek关于不包含fixed==TRUE的评论之外,您还需要在正则表达式中不包含空格。应该是"A1|A9|A6"

您还提到有很多模式。假设它们在一个向量中

toMatch <- c("A1", "A9", "A6")

然后,您可以使用pastecollapse = "|"直接创建正则表达式。

matches <- unique (grep(paste(toMatch,collapse="|"), 
                        myfile$Letter, value=TRUE))
票数 298
EN

Stack Overflow用户

发布于 2017-05-12 16:42:29

很好的答案,但是不要忘记来自dplyr的filter()

patterns <- c("A1", "A9", "A6")
>your_df
  FirstName Letter
1      Alex     A1
2      Alex     A6
3      Alex     A7
4       Bob     A1
5     Chris     A9
6     Chris     A6

result <- filter(your_df, grepl(paste(patterns, collapse="|"), Letter))

>result
  FirstName Letter
1      Alex     A1
2      Alex     A6
3       Bob     A1
4     Chris     A9
5     Chris     A6
票数 41
EN

Stack Overflow用户

发布于 2018-11-01 23:15:01

这应该是可行的:

grep(pattern = 'A1|A9|A6', x = myfile$Letter)

或者更简单地说:

library(data.table)
myfile$Letter %like% 'A1|A9|A6'
票数 28
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7597559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档