R 矩阵中所有列都相同的行之和
我试图计算所有逻辑运算符都相同的行数。下面是一个示例矩阵:R 矩阵中所有列都相同的行之和,r,R,我试图计算所有逻辑运算符都相同的行数。下面是一个示例矩阵: x <- matrix(c(TRUE,TRUE,TRUE,TRUE, TRUE,FALSE,TRUE,TRUE, TRUE,TRUE,TRUE,TRUE, FALSE,TRUE,TRUE,TRUE), nrow=4, ncol=4) 我想做的是只使用内置函数,不使用循环或if语句来计算所有值均为TRUE(本例中为2)的行数。矩阵可以是任意大小。我完全迷路了。我的想法是检
x <- matrix(c(TRUE,TRUE,TRUE,TRUE,
TRUE,FALSE,TRUE,TRUE,
TRUE,TRUE,TRUE,TRUE,
FALSE,TRUE,TRUE,TRUE), nrow=4, ncol=4)
我想做的是只使用内置函数,不使用循环或if语句来计算所有值均为
TRUE
(本例中为2)的行数。矩阵可以是任意大小。我完全迷路了。我的想法是检查TRUE
行的长度,但这行不通。我是否应该将其转换为数组,然后根据行的长度进行判断,即使不知道行的长度?您可以获得一个逻辑向量,指示哪些行都是真的,如下所示:
[,1] [,2] [,3] [,4]
[1,] TRUE TRUE TRUE FALSE
[2,] TRUE FALSE TRUE TRUE
[3,] TRUE TRUE TRUE TRUE
[4,] TRUE TRUE TRUE TRUE
apply(x, 1, all)
#> [1] FALSE FALSE TRUE TRUE
如果你只想数一数,那么你可以
sum(apply(x, 1, all))
#> [1] 2
我们可以使用
sum(rowSums(!x))
#[1] 2
sum(rowSums(x)=ncol(x))
或sum(rowsmeans(x)==1)
已经有很多好答案了,这里有另一种方法sum(complete.cases)(ifelse(x==T,T,NA))
@DanielO你的方法可能更有效:sum(complete.cases(replace(x,!x,NA))
@markus效率除外,它在尊重“no if statements”。或者,如果我们允许自己使用超过一行代码,我们也可以使用x[x==F]