首页 > 解决方案 > 找到一个向量的前 n 个元素,其中包含另一个向量的所有元素

问题描述

给定两个向量vecAvecB,我想找到最小的n这样

all(vecB %in% vecA[1:n])

TRUE

这是一个紧密的内循环,所以速度会很好。显然我可以

n <- NA_integer_ 
for (i in seq_along(vecA)) {
  if (all(vecB %in% vecA[1:i])) {
    n <- i
    break
  } 
}

但是有更快/更优雅的方式吗?

您可以使用的一件事:vecB总是将是形式的序列1:M

n这是一个应该等于 5的示例:

vecB <- 1:3
vecA <- c(1, 2, 2, 1, 3, 2)

标签: rvectorsubset

解决方案


一种选择可能是:

max(match(vecB, vecA))

不同情况的结果:

vecB <- 1:3
vecA <- c(1, 2, 2, 1, 3, 2)

[1] 5

vecB <- 1:3
vecA <- c(3, 2, 2, 1)

[1] 4

vecB <- 1:3
vecA <- c(2, 2, 1)

[1] NA

推荐阅读