Как я могу считать только непустые столбцы в R, в то время как включенные столбцы с разреженным NA?

#r #data-wrangling

Вопрос:

У меня есть матрица как таковая:

 A      B      C     D
1      4      5     NA
43     3      NA    NA
85     NA     43    NA
4      2      NA    NA
 

Я пытаюсь понять, как подсчитать количество непустых столбцов (в данном случае это будет = 3). Однако, если я это сделаю ncol(df) , я получу 4. Как я могу посчитать только те столбцы, которые не полностью пусты (в идеале с базой R или Tidyverse (стараюсь не использовать слишком много импортированных пакетов)?

Ответ №1:

Мы можем построить логическую матрицу с is.na помощью , получить colSums , преобразовать в логическую. вектор ( > 0 ) и получаем sum

 sum(colSums(!is.na(m1)) > 0)
[1] 3
 

Или может также использовать Filter на a data.frame и получить ncol

 ncol(Filter(function(x) any(!is.na(x)), as.data.frame(m1)))
[1] 3
 

данные

 m1 <- structure(c(1L, 43L, 85L, 4L, 4L, 3L, NA, 2L, 5L, NA, 43L, NA, 
NA, NA, NA, NA), .Dim = c(4L, 4L), .Dimnames = list(NULL, c("A", 
"B", "C", "D")))
 

Комментарии:

1. Отлично, спасибо! Это сработало. Я приму ответ, как только stackoverflow позволит

Ответ №2:

Мы могли бы использовать sum и sapply

 sum(sapply(df, function(y) sum(length(which(is.na(y))))>0))
 

выход:

 [1] 3