我的代码可以运行,但是非常慢。我想做的是取两个长度相等的向量,逐行检查值,然后计算均等于1的行数。我想强调一点,我并不是要对每个值的总和进行求和向量本身的值为1。相反,当这些向量并排排列时,我们看到两行等于1的次数是多少?
我已经使用for循环和if语句完成了此操作,在其中循环遍历“行对”,并在每次有匹配对等于1时将变量增加+1。该代码在下面,但是太慢了。我必须使用2000个向量(长度至少为4e6)执行此操作。
这里相对于R来说还比较陌生,但是如果有人对更快的方法有其他想法,我将不胜感激。
vec1 <- rep(c(0,0,1,1),times = 10)
vec2 <- rep(c(0,1,0,1),times = 10)
mat <- cbind(vec1,vec2)
matches <- 0
for(i in 1:length(mat[,1])){
if(mat[i,1] == 1 & mat[i,2] == 1){
matches <- matches + 1
}
}
如果向量只有1和0值:
sum(rowSums(mat) == 2)
#[1] 10
如果它们可以具有不同的值,则将其与1进行比较:
sum(rowSums(mat == 1) == 2)
要获取两列均为1的行号,我们可以使用which
:
which(rowSums(mat) == 2)
#[1] 4 8 12 16 20 24 28 32 36 40
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句