如何返回R中序列的行索引?

如何返回R中序列的行索引?,r,match,R,Match,我试图找到序列的行位置。我的意思是: x<-c(-1,1) y<-c(1,-1,1,0,-1,0,0) match(x,y) [1] 2 1 x这里有一个想法imatch()将查找所有匹配的索引,以防存在多组匹配。它通过检查两个连续的索引,一次一对,并检查它们是否与x向量相同来实现这一点。将删除不匹配项,并返回匹配项列表 imatch <- function(x, y) { Filter( Negate(is.null), lappl

我试图找到序列的行位置。我的意思是:

x<-c(-1,1)
y<-c(1,-1,1,0,-1,0,0)
match(x,y)
[1] 2 1

x这里有一个想法
imatch()
将查找所有匹配的索引,以防存在多组匹配。它通过检查两个连续的索引,一次一对,并检查它们是否与
x
向量相同来实现这一点。将删除不匹配项,并返回匹配项列表

imatch <- function(x, y) {
    Filter(
        Negate(is.null), 
        lapply(seq_along(length(y)-1), function(i) {
            ind <- i:(i+1)
            if(identical(y[ind], x)) ind 
        })
    )
}

imatch(c(-1, 1), c(1, -1, 1, 0, -1, 0, 0))
# [[1]]
# [1] 2 3

imatch(c(-1, 1), c(1, -1, 1, 0, -1, 1, 0))
# [[1]]
# [1] 2 3
#
# [[2]]
# [1] 5 6

imatch这里有一个想法
imatch()
将查找所有匹配的索引,以防存在多组匹配。它通过检查两个连续的索引,一次一对,并检查它们是否与
x
向量相同来实现这一点。将删除不匹配项,并返回匹配项列表

imatch <- function(x, y) {
    Filter(
        Negate(is.null), 
        lapply(seq_along(length(y)-1), function(i) {
            ind <- i:(i+1)
            if(identical(y[ind], x)) ind 
        })
    )
}

imatch(c(-1, 1), c(1, -1, 1, 0, -1, 0, 0))
# [[1]]
# [1] 2 3

imatch(c(-1, 1), c(1, -1, 1, 0, -1, 1, 0))
# [[1]]
# [1] 2 3
#
# [[2]]
# [1] 5 6

imatch可能有点复杂,但值得注意的是,在以下情况下:

m <- regexpr(paste0(x,collapse=""),paste0(z,collapse = ""),fixed=T)
seq(m,length.out=length(x))
mx2y2m序列(m,长度。out=长度(x))
[1] 2 3

它匹配两个位置,但不应匹配。

可能有点复杂,但值得注意,以防:

m <- regexpr(paste0(x,collapse=""),paste0(z,collapse = ""),fixed=T)
seq(m,length.out=length(x))
mx2y2m序列(m,长度。out=长度(x))
[1] 2 3

它匹配两个位置,但不应该匹配。

@Pierrelaffortune我很不确定,目标是相关的,但不完全相同(返回匹配的长度,而不是索引)。标记为重复。Richard下面的答案应该对你有用。如果效率是一个问题,那么dupe目标的任何答案在结束时都应该做与Richard相同的事情,例如,
lappy(find_pat(x,y),function(s)seq(from=s,length.out=length(x))
@pierrelaffortune我很不确定,目标是相关的,但不完全相同(返回匹配的长度,而不是索引)。作为dupe进行标记。Richard下面的答案应该对你有用。如果效率是一个问题,那么dupe目标的任何答案在结束时都应该与Richard的答案做相同的事情,例如,
lappy(find_pat(x,y),function(s)seq(from=s,length.out=length(x))