我想檢查矢量a
的元素是否在矢量b
的元素之間或不在R.我該怎麼做?意思是2到4之間的3,如果是,則出現在結果中,如果不是則不出現。剛纔提到我不想檢查向量a的第一個和最後一個元素。結果應該是剛剛3.是介於R
a = c(1, 3, 8, 12)
b = c(0, 2, 4, 6, 8)
我想檢查矢量a
的元素是否在矢量b
的元素之間或不在R.我該怎麼做?意思是2到4之間的3,如果是,則出現在結果中,如果不是則不出現。剛纔提到我不想檢查向量a的第一個和最後一個元素。結果應該是剛剛3.是介於R
a = c(1, 3, 8, 12)
b = c(0, 2, 4, 6, 8)
爲什麼你不使用循環?
> 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
我不知道爲什麼答案是低估。它被接受爲正確答案。我的回答太直截了當(沒有人會打字)?請選民自行辯解嗎?或提供建議? – HongboZhu
這是我會怎麼做:
> 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
。
'findInterval'可能對此用例更加清晰。 – hadley
我覺得這個問題有點模棱兩可。你期望你的例子中的輸出是什麼,爲什麼? – NPE
這裏是醜陋的測試代碼,可能是正確的:res < - findInterval(a [-c(1,length(a))],b); a [res [!b [res]%in%b [c(1,length(b))]]] – mdsumner