比较两个未知长度的向量以找到一个公共值?-R

比较两个未知长度的向量以找到一个公共值?-R,r,statistics,R,Statistics,如何比较R中的两个向量,并沿元素找到最后一个常见的“真”值 这有点难以解释,下面是一个例子: Element: [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] vec1 <- TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, NA, FALSE, vec2 <- TRUE, TRUE, TRUE, TRUE, NA, FALSE, FALS

如何比较R中的两个向量,并沿元素找到最后一个常见的“真”值

这有点难以解释,下面是一个例子:

  Element:  [1]   [2]   [3]   [4]   [5]    [6]    [7]    [8]  [9]   [10]
  vec1 <- TRUE, TRUE, TRUE, TRUE, TRUE,  TRUE,  TRUE, FALSE,  NA, FALSE,
  vec2 <- TRUE, TRUE, TRUE, TRUE,   NA, FALSE, FALSE,    NA,  NA,    NA,
元素:[1][2][3][4][5][6][7][8][9][10]

vec1这里有一种方法,因为逻辑值(F=0和T=1)加起来等于2意味着2
TRUE
。因此,我们只需将这两个向量相加,使用
which
找到那些
=
的索引为2,然后取最后一个带有
尾的向量:

tail(which(vec1 + vec2 == 2), 1)

您的示例中感兴趣的部分是
,其中
相交
。下面是一个可复制的示例

vec1 = sample(c(TRUE,FALSE),10, replace=TRUE)
vec2 = sample(c(TRUE,FALSE),10, replace=TRUE)
max(intersect(which(vec1), which(vec2)))

l我认为这不是答案,因为他在寻找“最后一个常见的真理”。从这个例子中,我还认为我们可以假设向量的长度相等。如果保证向量长度相等,那么第一行当然是不必要的。如果每个向量的长度不同,它会对你的答案产生什么影响?当然,如果可以的话,这也很好,即使向量的长度不相等,这也是可行的。在这种情况下,只比较第一个min(length(vec1)、length(vec2))元素是必要的,否则会循环使用较短的向量。但是马特·韦勒的答案也适用于长度不等的向量,看起来更优雅……好的,很好。谢谢你的回答。它们都很好用。有一些变化可以学习,这很好。:)我不太清楚为什么这会被否决。。。这是一个有效的查询,但还没有答案,所以。。。下面的所有答案都起到了作用:)
l <- min(length(vec1), length(vec2))
tail(which((vec1[1:l] == vec2[1:l])), 1)