计算与R中的值匹配的行的更快方法

CAM_etal

我的代码可以运行,但是非常慢。我想做的是取两个长度相等的向量,逐行检查值,然后计算均等于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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章