检查向量的哪些元素在R中的另一个元素之间

时间:2013-04-04 04:01:29

标签: r

我是R的新用户。如何检查向量A的哪些元素位于向量B的元素之间,例如:

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

表示A的哪些元素介于1和2之间,然后A的哪个元素介于2和3之间?

4 个答案:

答案 0 :(得分:3)

您想要findInterval

的某些变体
findInterval(A,B)
[1] 1 3 3 3 3 2

值1表示介于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

答案 1 :(得分: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

答案 2 :(得分: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

答案 3 :(得分: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)))