Подсчет не NA в кадре данных; получение ответа в виде вектора
Скажем, у меня есть следующий R data.frame ZZZ
:
( ZZZ <- structure(list(n = c(1, 2, NA), m = c(6, NA, NA), o = c(7, 8,
8)), .Names = c("n", "m", "o"), row.names = c(NA, -3L), class = "data.frame") )
## not run
n m o
1 1 6 7
2 2 NA 8
3 NA NA 8
Я хочу знать, в виде вектора, сколько у меня не-NA. Я хочу, чтобы ответ был доступен мне как:
2, 1, 3
Когда я использую команду length(ZZZ)
, я получаю 3
, что, конечно же, является числом векторов в data.frame, достаточно ценной части информации.
У меня есть другие функции, которые работают с этим файлом data.frame и дают мне ответы в виде векторов, но dang-it длина не работает так.
Ответы
Ответ 1
Попробуйте следующее:
# define "demo" dataset
ZZZ <- data.frame(n=c(1,2,NA),m=c(6,NA,NA),o=c(7,8,8))
# apply the counting function per columns
apply(ZZZ, 2, function(x) length(which(!is.na(x))))
Запуск:
> apply(ZZZ, 2, function(x) length(which(!is.na(x))))
n m o
2 1 3
Если вы действительно настаиваете на возврате вектора, вы можете использовать as.vector
, например. определяя эту функцию:
nonNAs <- function(x) {
as.vector(apply(x, 2, function(x) length(which(!is.na(x)))))
}
Вы можете просто запустить nonNAs(ZZZ)
:
> nonNAs(ZZZ)
[1] 2 1 3
Ответ 2
colSums(!is.na(x))
Веклизация ftw.
Ответ 3
Для получения полного количества отсутствующих значений используйте sum (is.na(x)) и для colum-wise используйте colSums (is.na(x)), где x является varible, который содержит набор данных
Ответ 4
Если вам нужна общая сумма NA в целом, то sum() с помощью функции is.na() сделает это:
ZZZ <- data.frame(n = c(1, 2, NA), m = c(6, NA, NA), o = c(7, 8, 8))
sum(!is.na(ZZZ))