0

我有两个向量。我想检查第一个向量的第一个元素在第二个向量的第一个和第二个元素之间,然后检查第一个向量的第二个元素在第二个向量的第三个和第四个元素之间,.....我该怎么做在 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。

4

3 回答 3

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
于 2013-05-15T06:52:28.553 回答
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]})
于 2013-05-15T06:49:31.927 回答
0

这是一种方法。

s <- seq_along(a)  
b[s] < a[s] & a[s] < b[s+1]
# [1]  TRUE FALSE  TRUE
于 2013-05-15T12:33:53.430 回答