Определите количество значений NA в столбце

Я хочу подсчитать количество значений NA в столбце фрейма данных. Скажем, что мой кадр данных называется df, а имя столбца, которое я рассматриваю, - col. Как я придумал следующее:

sapply(df$col, function(x) sum(length(which(is.na(x)))))  

Это хороший/самый эффективный способ сделать это?

Ответ 1

Вы слишком задумываетесь о проблеме:

sum(is.na(df$col))

Ответ 2

Если вы ищете NA counts для каждого столбца в кадре данных, тогда:

na_count <-sapply(x, function(y) sum(length(which(is.na(y)))))

должен предоставить вам список с подсчетами для каждого столбца.

na_count <- data.frame(na_count)

Должно выводить данные в виде данных как:

----------------------
| row.names | na_count
------------------------
| column_1  | count

Ответ 3

Если вы хотите подсчитать количество НС во всем фрейме данных, вы также можете использовать

sum(is.na(df))

Ответ 4

В выводе summary() функция также подсчитывает NA, поэтому эту функцию можно использовать, если вы хотите получить сумму NA в нескольких переменных.

Ответ 5

Эта форма слегка изменилась с Кевина Огороса:

na_count <-function (x) sapply(x, function(y) sum(is.na(y)))

возвращает NA counts как именованный массив int

Ответ 6

Попробуйте функцию colSums

df <- data.frame(x = c(1,2,NA), y = rep(NA, 3))

colSums(is.na(df))

#x y 
#1 3 

Ответ 7

Типичный способ подсчета количества нулей в каждом столбце блока данных:

library(tidyverse)
library(purrr)

df %>%
    map_df(function(x) sum(is.na(x))) %>%
    gather(feature, num_nulls) %>%
    print(n = 100)

Ответ 8

Ответ пользователя rrs прав, но он сообщает только количество значений NA в конкретном столбце кадра данных, которое вы передаете, чтобы получить количество значений NA для всего кадра данных. Попробуйте это:

apply(<name of dataFrame>, 2<for getting column stats>, function(x) {sum(is.na(x))})

Это трюк

Ответ 9

Попробуйте следующее:

length(df$col[is.na(df$col)])

Ответ 10

Я прочитал файл csv из локального каталога. Следующий код работает для меня.

# to get number of which contains na
sum(is.na(df[, c(columnName)]) # to get number of na row

# to get number of which not contains na
sum(!is.na(df[, c(columnName)]) 

#here columnName is your desire column name

Ответ 11

Вы можете использовать это для подсчета числа NA или пробелов в каждом столбце

colSums(is.na(data_set_name)|data_set_name == '')