我正在尝试使用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个匹配,这不是真的,有什么建议吗?
发布于 2011-10-06 00:35:30
除了@Marek关于不包含fixed==TRUE
的评论之外,您还需要在正则表达式中不包含空格。应该是"A1|A9|A6"
。
您还提到有很多模式。假设它们在一个向量中
toMatch <- c("A1", "A9", "A6")
然后,您可以使用paste
和collapse = "|"
直接创建正则表达式。
matches <- unique (grep(paste(toMatch,collapse="|"),
myfile$Letter, value=TRUE))
发布于 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
发布于 2018-11-01 23:15:01
这应该是可行的:
grep(pattern = 'A1|A9|A6', x = myfile$Letter)
或者更简单地说:
library(data.table)
myfile$Letter %like% 'A1|A9|A6'
https://stackoverflow.com/questions/7597559
复制相似问题