2013-05-15 36 views
0

我有兩個向量。我想檢查第一個向量的第一個元素是第二個向量的第一個元素和第二個元素之間,然後檢查第一個向量的第二個元素是第二個向量的第三個元素和第四個元素之間,如何才能做到這一點在R?檢查vetcor的元素是否在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。

+1

這個問題與您以前的問題有何不同? – mnel

+0

@mnel這是一個不同的問題,因爲第一個向量的長度是第二個向量長度的一半,我只想檢查第一個向量的第一個元素是否在第二個向量的第一個元素和第二個元素之間,不想要檢查是否在第二個向量的其他元素之間。 – rose

回答

0

這裏有一種方法。

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

感謝您的回覆。 – rose

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]}) 
+1

這裏不需要循環。 – Roland

+0

當然,這只是爲了說明。你的解決方案非常好。 – DrDom

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 
+0

第一個矢量的長度是第二個矢量的一半。這意味着我不想檢查第一個向量的第一個元素就在第二個向量的第一個元素和第二個元素之間,而不是檢查第二個向量的另一個值,而第一個元素的第二個元素只是在第三個元素和第四個元素之間第二個矢量或不是。我該怎麼做? – rose

+0

我完全不理解你的評論。 – Roland

相關問題