检查向量的元素是否在R中第二个向量的元素之间

时间:2013-05-15 06:35:57

标签: r

我有两个向量。我想检查第一个向量的第一个元素是在第二个向量的第一个和第二个元素之间,然后检查第一个向量的第二个元素是在第二个向量的第三个和第四个元素之间,.....我怎么能这样做在R?

例如,如果我们有两个载体

   a = c(1.5, 2, 3.5)
   b = c(1, 2, 3, 5, 3, 8)

R中的最终结果应为1.5为TRUE,3.5为TRUE,2为FALSE。

3 个答案:

答案 0 :(得分:1)

x <- c(1.5,3.5,3.5,3.5,4)

y <- 1:5

x > y & x < c(y[-1],NA)

#[1]  TRUE FALSE  TRUE FALSE FALSE

你需要注意向量长度并考虑,你想要的结果是x的最后一个元素,当然。

更强大的解决方案:

x <- c(1.5,3.5,3.5,3.5,4)
findInterval(x,y) == seq_along(x)
#[1]  TRUE FALSE  TRUE FALSE FALSE

x1 <- c(1.5,3.5)
findInterval(x1,y) == seq_along(x1)
#[1]  TRUE FALSE

x2 <- c(1.5,3.5,1:5+0.5)
findInterval(x2,y) == seq_along(x2)
#[1]  TRUE FALSE FALSE FALSE FALSE FALSE FALSE

答案 1 :(得分:0)

也许这不是一个理想的,最快的解决方案,但它确实有效。

a <- rnorm(99)
b <- rnorm(100)
m <- cbind(b[-length(b)], b[-1])
a > m[,1] & a < m[,2]

你应该检查两个初始向量的长度。

以下是单行解决方案:

sapply(1:length(a), function(i) {a[i] > b[i] & a[i] < b[i+1]})

答案 2 :(得分:0)

这是一种方式。

s <- seq_along(a)  
b[s] < a[s] & a[s] < b[s+1]
# [1]  TRUE FALSE  TRUE