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