2012-12-06 17 views
0

我想檢查矢量a的元素是否在矢量b的元素之間或不在R.我該怎麼做?意思是2到4之間的3,如果是,則出現在結果中,如果不是則不出現。剛纔提到我不想檢查向量a的第一個和最後一個元素。結果應該是剛剛3.是介於R

 a = c(1, 3, 8, 12) 
     b = c(0, 2, 4, 6, 8) 
+6

我覺得這個問題有點模棱兩可。你期望你的例子中的輸出是什麼,爲什麼? – NPE

+0

這裏是醜陋的測試代碼,可能是正確的:res < - findInterval(a [-c(1,length(a))],b); a [res [!b [res]%in%b [c(1,length(b))]]] – mdsumner

回答

-1

爲什麼你不使用循環?

> a = c(1, 3, 8, 12) 
> b = c(0, 2, 4, 6, 8) 
> for (i in 2:(length(a)-1)){ if (b[i] < a[i] && a[i] <b[i+1]) {print (a[i])}} 
[1] 3 
+0

我不知道爲什麼答案是低估。它被接受爲正確答案。我的回答太直截了當(沒有人會打字)?請選民自行辯解嗎?或提供建議? – HongboZhu

-1

這是我會怎麼做:

> Interval <- cut(a, b, FALSE)   ## Which 'slot' of b does a fit into? 
> Interval 
[1] 1 2 4 NA 
> Interval == 1:length(a)     ## Does it fit sequentially? 
[1] TRUE TRUE FALSE NA 

由於a[4]落在b外面完全,您可以用FALSE之後替換所有NA值(即Vec[is.na(Vec)] <- F)或在剪切函數中使用c(b,max(a))而不是b

+0

'findInterval'可能對此用例更加清晰。 – hadley