Вы попробовали sum(complete.cases(x))
?!
set.seed(123)
x <- matrix(sample(c(NA,1:5) , 15 , TRUE) , 5)
# [,1] [,2] [,3]
#[1,] 1 NA 5
#[2,] 4 3 2
#[3,] 2 5 4
#[4,] 5 3 3
#[5,] 5 2 NA
sum(complete.cases(x))
#[1] 3
Чтобы найти complete.cases()
первых двух столбцов:
sum(complete.cases(x[,1:2]))
#[1] 4
И к apply
двух столбцов matrix
через всю матрицу вы могли бы сделать это:
# Bigger data for example
set.seed(123)
x <- matrix(sample(c(NA,1:5) , 50 , TRUE) , 5)
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#[1,] 1 NA 5 5 5 4 5 2 NA NA
#[2,] 4 3 2 1 4 3 5 4 2 1
#[3,] 2 5 4 NA 3 3 4 1 2 2
#[4,] 5 3 3 1 5 1 4 1 2 1
#[5,] 5 2 NA 5 3 NA NA 1 NA 5
# Column indices
id <- seq(1 , ncol(x) , by = 2)
[1] 1 3 5 7 9
apply(cbind(id,id+1) , 1 , function(i) sum(complete.cases(x[,c(i)])))
[1] 4 3 4 4 3
complete.cases()
работает по всей шкале в целом data.frame
или matrix
возвращение TRUE
для тех строк, которые не пропускают никаких данных. Недостаток в стороне: "c"
- плохое имя переменной, потому что c()
является одной из наиболее часто используемых функций.
К какому пакету относится 'rollapply'? И я не понимаю, почему 'sum (complete.cases (c))' не должен быть лучшим кодом для вашей проблемы. – Beasterfield