2013-04-04 43 views
2

元件之間我在R.新用戶如何檢查該矢量A的元素是矢量B的例如元件之間:檢查哪個一個矢量的元素是另一個的R中

A = c(1.1, 3.2, 5, 8.5, 4.6, 2.2) 
    B = c(1, 2, 3) 

表示A的哪些元素在1和2之間,那麼A的哪些元素在2和3之間?

+0

的期望是什麼輸出?一個列表? – Nishanth 2013-04-04 05:17:24

回答

3

你想值1的findInterval

findInterval(A,B) 
[1] 1 3 3 3 3 2 

一些變體表示爲1和2(B中的最低和下一個最低值) 值2表明它是在2和3之間

因此,要找到哪些是

which(findInterval(A,B) %in% seq_len(length(unique(B))-1)) 
# [1] 1 6 

之間,並從A

提取
A[findInterval(A,B) %in% seq_len(length(unique(B))-1)] 

# [1] 1.1 2.2 

您也可以使用cut,這將創建一個因子。

split結合這會給

split(A, cut(A,B),drop=FALSE) 
$`(1,2]` 
[1] 1.1 

$`(2,3]` 
[1] 2.2 
+0

謝謝,但我怎麼能單獨得到的結果意味着第一個區間和第二個分開,而不是在一個向量,我也應該提到向量B可能不是連續的數。 – rose 2013-04-04 04:40:30

+1

@玫瑰 - 請做一個可重複的例子,你想要什麼,我已經增加了另一種可能性,你真的想要單獨的向量?查找間隔不需要連續的數字,但排序非遞減的數字,剪切需要唯一的中斷。 – mnel 2013-04-04 04:48:03

+0

好方法。它逃脫了我,但現在似乎非常明顯:) +1 – 2013-04-04 04:53:10

1

如果我理解正確的話,這是一種可能性:

A = c(1.1, 3.2, 5, 8.5, 4.6, 2.2) 
B = c(1, 2, 3,4,10) 

B1 <- head(B, -1) 
B2 <- tail(B, -1) 

outs <- list() 

for(i in seq_along(B1)) { 
    outs[[i]] <- A[B1[i] < A & A < B2[i]] 
} 

names(outs) <- paste(B1, " & ", B2) 

## > outs 
## $`1 & 2` 
## [1] 1.1 
## 
## $`2 & 3` 
## [1] 2.2 
## 
## $`3 & 4` 
## [1] 3.2 
## 
## $`4 & 10` 
## [1] 5.0 8.5 4.6 
+0

你剛纔在這裏重新創建了'cut'和'split' ...... :) :) – mnel 2013-04-04 04:50:26

+0

我意識到看到你的迴應後:)我的可能不是一樣快。 – 2013-04-04 04:51:49

1

我假定這將是連續的數字B中爲您將檢查

result.pair<-matrix(rep(integer(), 3), ncol = 3) 
colnames(result.pair)<-c("B1", "A", "B2") 
for(i in 1:(length(B))) 
{ 
    for(j in 1:(length(A))) 
    { 
    if ((B[i] <= A[j]) & (B[i+1] >= A[j])) 
    { 
     result.pair<-rbind(result.pair, c(B[i], A[j], B[i+1])) 
    } 
    } 

} 

result.pair 
0

試試這個:

 data.frame(A,cut(A,B)) 

對於A中的每一個觀察,它都會告訴你它之間的哪一對B觀測值。

像這樣:

> data.frame(A,cut(A,B)) 
    A cut.A..B. 
1 1.1  (1,2] 
2 3.2  <NA> 
3 5.0  <NA> 
4 8.5  <NA> 
5 4.6  <NA> 
6 2.2  (2,3] 

NA意味着它不是兩個B觀測之間。

相關搜索:

data.frame(A,cut(A,c(-Inf,B,Inf))) 
相關問題