在R中同时比较多个向量?

时间:2014-12-14 14:50:45

标签: r vector logical-operators

我可以很容易地比较R中的2个向量,看看有多少元素是相同的。 说

  a<- c(1,2,3,4)
  b<- c(1,2,3,5)
  sum(a==b) would give me what I want

但我如何比较3个载体?或同时超过3个向量?

  a<- c(1,2,3,4)
  b<- c(1,2,3,5)
  c<- c(2,3,4,5)
  sum(a==b & b==c) # does not seem to be correct

我正在寻找相同位置的元素是否相同。在相同的情况下,它会给我零,因为a,b,c在同一位置不是全部相同。

count = 0
for(i in 1:length(a)){
  if((a[i]==b[i]) & (a[i]==c[i]))
  count=count+1
} # this will give me that I want, but the efficiency seems very low 

2 个答案:

答案 0 :(得分:5)

创建matrixdata.frame并检查其中一个column是否与其他人相等。

 m1 <- cbind(a,b,c)
 sum(rowSums(m1==m1[,1])==ncol(m1))
 #[1] 0

或者

 sum(Reduce(`&`,Map(`==`, list(a,b,c), list(a))))
 #[1] 0

如果要查找公共元素的长度,

 length(Reduce(intersect,list(a,b,c)))
 #[1] 2

答案 1 :(得分:2)

is.equal <- function(mylist) {

    check.eq <- sapply(mylist[-1], function(x) {x == mylist[[1]]})

    as.logical(apply(check.eq, 1, prod))                   

}

is.equal(list(c(1,2,3,4), c(1,2,5,4), c(1,1,3,4)))

[1]  TRUE FALSE FALSE  TRUE