我在R中有一个矩阵,格式如下:
A B C D E
1 0 0 1 0
0 0 1 0 1
1 1 1 0 1
.
.
.
我需要将每行的值与行D&E中的相应值进行比较 . 例如:
if(mat[1,1] == 1 && mat[1,4]==1)
vec[1]+=1
else if(mat[1,1] == 1 && mat[1,5]==1)
vec[1]-=1
基本上,如果第4列中的1的数量大于第5列中的1的数量,则 vec
将为正数 .
为此,我传递使用apply函数,该函数按行调用元素,然后运行从1到列数的循环,并执行上述条件,如下所示:
outputv = vector(,ncol(mat))
A <- function(vec){
for(i in 1:length(vec)-2)
{
if(vec[i]==1 &&vec[length(vec)-1]==1)
outputv[i] = outputv[i] + 1
else if(vec[i] == 1&& vec[length(vec)-2]==1)
outputv[i] = outputv[i] - 1
}
}
apply(mat,1,A)
我确实认识到循环不是一种有效的方法,但即使采用这种方法,outputv中的值都是0 .
给定输入矩阵的预期输出v将是
0 1 2
对于第一列,1出现在第1行和第3行 . 在第一行第4列中,有1,减1.第3第5列有1,所以加1总= -1 1 = 0
1 回答
逻辑运算&等同于二进制乘法 . 因此,您可以将条件简化为逐列乘法,然后计算总和 .
但最好(和快速)的解决方案可能是基于矩阵乘法的这种方法:
它提供了所需的输出: