Gee*_*Cat 5 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
Run Code Online (Sandbox Code Playgroud)
但是我如何比较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
Run Code Online (Sandbox Code Playgroud)
我在寻找相同位置的元素是否相同.在相同的情况下,它会给我零,因为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
Run Code Online (Sandbox Code Playgroud)
创建一个matrix或data.frame检查其中一个是否column等于其余部分.
m1 <- cbind(a,b,c)
sum(rowSums(m1==m1[,1])==ncol(m1))
#[1] 0
Run Code Online (Sandbox Code Playgroud)
要么
sum(Reduce(`&`,Map(`==`, list(a,b,c), list(a))))
#[1] 0
Run Code Online (Sandbox Code Playgroud)
如果要查找常用元素的长度,
length(Reduce(intersect,list(a,b,c)))
#[1] 2
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)