R中的grep使用具有多个模式的字符向量,其顺序与向量相同
grep in R using a character vector with multiple patterns with same order as vector
我有两个要 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找到的第一个元素排序,而不是使用匹配向量
提前感谢您提供更高效代码的想法。
妮可
尝试 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"
我有两个要 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找到的第一个元素排序,而不是使用匹配向量
提前感谢您提供更高效代码的想法。
妮可
尝试 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"