元件之間我在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之間?
元件之間我在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之間?
你想值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
如果我理解正確的話,這是一種可能性:
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
你剛纔在這裏重新創建了'cut'和'split' ...... :) :) – mnel 2013-04-04 04:50:26
我意識到看到你的迴應後:)我的可能不是一樣快。 – 2013-04-04 04:51:49
我假定這將是連續的數字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
試試這個:
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)))
的期望是什麼輸出?一個列表? – Nishanth 2013-04-04 05:17:24