你试过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
而要在整个矩阵matrix
的apply
两列,你可以这样做:
# 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