Подсчет количества столбцов в логической матрице в R
У меня есть такая матрица в R:
matrix =
1 2 3 4 5 6 7 8 9 10
X3 TRUE FALSE FALSE FALSE TRUE FALSE FALSE TRUE FALSE TRUE
X2 TRUE FALSE TRUE FALSE TRUE FALSE FALSE TRUE FALSE TRUE
X1 FALSE FALSE TRUE FALSE TRUE TRUE FALSE TRUE FALSE TRUE
и мне нужно знать, сколько столбцов имеют свои 3 значения в ИСТИНА. Решение, которое я ищу, должно быть достаточно общим, чтобы его можно было применить к любым возможным размерам матрицы. Я старался
length(which(apply(matrix, 2, function(x) x[1] & x[2] & x[3])))
и это сработало, но это не является общим.
Вы можете мне помочь?
Спасибо!
Мариано.
1 ответ
Решение
Мы можем использовать colSums
on the logical matrix and check whether it is 3 ie the number of rows of the matrix. Получить sum
этого
sum(colSums(m1)==nrow(m1))
#[1] 3
As the OP used apply
, it can be also done with all
sum(apply(m1, 2, all))
#[1] 3
As @RHertel mentioned in the comments, if the values are numeric and if 0 corresponds to FALSE and all other elements as TRUE, then change it to a logical matrix with m1!=0
или же !!m1
затем сделайте colSums
and the rest as above.
sum(colSums(!!m1) == nrow(m1))
данные
m1 <- structure(c(TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE,
TRUE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, TRUE,
FALSE, FALSE, FALSE, TRUE, TRUE, TRUE, FALSE, FALSE, FALSE, TRUE,
TRUE, TRUE), .Dim = c(3L, 10L), .Dimnames = list(c("X3", "X2",
"X1"), c("X1", "X2", "X3", "X4", "X5", "X6", "X7", "X8", "X9", "X10")))