【问题标题】:grep in R using a character vector with multiple patterns with same order as vectorR中的grep使用具有与向量相同顺序的多个模式的字符向量
【发布时间】:2018-12-18 17:32:38
【问题描述】:

我有两个要 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找到的第一个元素对匹配进行排序,而不是使用匹配向量。

提前感谢您提出更高效代码的想法。

尼可

【问题讨论】:

    标签: r grepl


    【解决方案1】:

    试试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" 
    

    【讨论】:

      猜你喜欢
      • 2011-11-27
      • 1970-01-01
      • 1970-01-01
      • 2018-04-08
      • 1970-01-01
      • 2021-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多