R中的grep使用具有多个与向量顺序相同的模式的字符向量

时间:2018-12-18 17:32:38

标签: r grepl

我有两个要grep的向量,但我想保持grep模式中的顺序。我想通过循环来解决它,尽管我想知道是否还有其他(更好)的方法。

EG。

to_match <- c("KZB8","KBB9","KBC9","KZA9","KZB2","KZB5","KZB6")
vectorA <- c("RuL_KZA9","RuL_KZB9","RuL_KZA5","RuL_KZC6","RuL_KZB8")

我这样解决:

matching <- c()
for (i in to_match){
  t <- grep(i, vectorA, value = T)
  matching <- c(matching,t)
}
> matching
[1] "RuL_KZB8" "RuL_KZA9"

顺便说一句,我在这里看到了不错的答案:grep using a character vector with multiple patterns

但是您将看到问题所在:

grep(paste(to_match, collapse = "|"),vectorA, value = T)
[1] "RuL_KZA9" "RuL_KZB8"

是根据grep找到的第一个元素而不是使用匹配向量对匹配进行排序。

预先感谢您提供更有效代码的想法。

Niko

1 个答案:

答案 0 :(得分:4)

尝试lapply

unlist(lapply(to_match, grep, vectorA, value = TRUE))
## [1] "RuL_KZB8" "RuL_KZA9"

unlist(sapply(to_match, grep, vectorA, value = TRUE))
##       KZB8       KZA9 
## "RuL_KZB8" "RuL_KZA9"