R:匹配另一个向量中的向量作为整体

时间:2015-11-20 20:15:06

标签: r

是否有一种简单,直接的方式(可能是内置函数)可以在另一个向量中将一个向量作为一个整体匹配? 例如:

%in%

我尝试了matchpmatchtarget %in% A,但这些都没有给出所需的结果。例如,target %in% B[1] TRUE TRUE TRUE都会给出结果int count[]=new int[p]; ,这不是我想要的。

3 个答案:

答案 0 :(得分:4)

这是另一个版本

multi_match=function(target,A) {
  lA=length(A)
  lt=length(target)
  if (lt>lA) return(FALSE)
  any(colSums(sapply(1:(lA-lt+1),function(i) A[i:(i+lt-1)])==target)==lt)
}

让我们尝试一些数据

target <- c(1,2,3)
A <- c(4,5,6,1,2,3,1,2,3,1,3)
B <- c(4,5,6,3,2,1)

multi_match(target,A)
#TRUE

multi_match(target,B)
#FALSE

#"wrong" input order - trivially no match
multi_match(A,target)
#FALSE

上面的multi_match函数的扩展名为multi_which

multi_which=function(target,A) {
  lA=length(A)
  lt=length(target)
  if (lt>lA) return(integer(0))
  which(colSums(sapply(1:(lA-lt+1),function(i) A[i:(i+lt-1)])==target)==lt)
}


multi_which(target,A)
#[1] 4 7

multi_which(target,B)
#integer(0)

#"wrong" input order - trivially no match
multi_which(A,target)
#integer(0)

答案 1 :(得分:3)

尝试:

grepl(paste(target,collapse=","),paste(A,collapse=","))
grepl(paste(target,collapse=","),paste(B,collapse=","))

这将向量连接成字符串,并在第二个参数中查找与第一个匹配的子字符串。

你可以把它放到一个返回true或false的函数中:

my_match <- function(x,y,dlm=",") grepl(paste(x,collapse=dlm),paste(y,collapse=dlm))

my_match(target,A)
[1] TRUE
my_match(target,B)
[1] FALSE

答案 2 :(得分:2)

一种可能的方法是使用match并检查结果序列是否正在上升

all(diff(match(target, A)) == 1) && length(match(target, A)) == length(target)

或作为一项功能

> exact_match <- function(p, x) all(diff(match(p, x)) == 1) && length(match(p, x)) == length(p)
> exact_match(target,A)
[1] TRUE
> exact_match(target,B)
[1] FALSE