我有两个向量。我想检查第一个向量的第一个元素在第二个向量的第一个和第二个元素之间,然后检查第一个向量的第二个元素在第二个向量的第三个和第四个元素之间,.....我该怎么做在 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。
我有两个向量。我想检查第一个向量的第一个元素在第二个向量的第一个和第二个元素之间,然后检查第一个向量的第二个元素在第二个向量的第三个和第四个元素之间,.....我该怎么做在 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。
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
也许这不是一个理想且最快的解决方案,但它确实有效。
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]})
这是一种方法。
s <- seq_along(a)
b[s] < a[s] & a[s] < b[s+1]
# [1] TRUE FALSE TRUE