#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