Я хочу подсчитать количество NA
значений в столбце фрейма данных. Скажем, мой фрейм данных вызван df
, а имя рассматриваемого столбца - col
. Я придумал следующее:
sapply(df$col, function(x) sum(length(which(is.na(x)))))
Это хороший / самый эффективный способ сделать это?
value
, кромеNA
написания логической функции,is.value
а затем использованияsum(is.value(df$col))
пути, по которому идти, или для этого есть более сжатый прямой синтаксис?sum(df$col==value,na.rm=FALSE)
делает свое дело.na.rm=TRUE
, потому что в противном случае, если онdf$col
содержит NA,sum
вернетсяNA
.Если вы ищете
NA
количество для каждого столбца в фрейме данных, тогда:na_count <-sapply(x, function(y) sum(length(which(is.na(y)))))
должен дать вам список с подсчетами для каждого столбца.
Должны выводиться данные в виде фрейма данных, например:
источник
na_count$name<-rownames(na_count)
.na_count <-sapply(x, function(y) sum(is.na(y)))
это более короткая альтернатива.Попробуйте
colSums
функциюdf <- data.frame(x = c(1,2,NA), y = rep(NA, 3)) colSums(is.na(df)) #x y #1 3
источник
Если вы хотите подсчитать количество NA во всем фрейме данных, вы также можете использовать
источник
На
summary()
выходе функция также считаетNA
s, поэтому можно использовать эту функцию, если требуется суммаNA
s в нескольких переменных.источник
summary
вывод, когда он используется в одном столбце, может использоваться, в то время как его вывод из всего фрейма данных является символьным, и счетчики трудно извлечь, если они вам понадобятся позже. Смотритеc(summary(mtcars))
.Аккуратный способ подсчитать количество нулей в каждом столбце фрейма данных:
library(tidyverse) library(purrr) df %>% map_df(function(x) sum(is.na(x))) %>% gather(feature, num_nulls) %>% print(n = 100)
источник
df %>% summarise_all(funs(sum(is.na(.))))
df %>% map_df(~sum(is.na(.)))
или без dplyr asmap_df(~sum(is.na(df)))
Эта форма, немного измененная по сравнению с формой Кевина Огорос:
na_count <-function (x) sapply(x, function(y) sum(is.na(y)))
возвращает количество NA как именованный массив int
источник
na_count <-function (x) lapply(x, function(y) sum(is.na(y)))
Быстрое и простое решение Tidyverse для
NA
подсчета всех столбцов - это использовать,summarise_all()
что, как мне кажется, значительно упрощает чтение решения, чем использованиеpurrr
илиsapply
library(tidyverse) # Example data df <- tibble(col1 = c(1, 2, 3, NA), col2 = c(NA, NA, "a", "b")) df %>% summarise_all(~ sum(is.na(.))) #> # A tibble: 1 x 2 #> col1 col2 #> <int> <int> #> 1 1 2
источник
Попробуй это:
источник
Ответ пользователя rrs правильный, но он сообщает вам только количество значений NA в конкретном столбце фрейма данных, который вы передаете, чтобы получить количество значений NA для всего фрейма данных, попробуйте следующее:
apply(<name of dataFrame>, 2<for getting column stats>, function(x) {sum(is.na(x))})
Это трюк
источник
apply(df, 2, function(x) sum(is.na(x)))
Я прочитал 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
источник
Аналогично ответу hute37, но с использованием
purrr
пакета. Я думаю, что этот подход проще, чем ответ, предложенный AbiK.library(purrr) map_dbl(df, ~sum(is.na(.)))
Примечание: тильда (
~
) создает анонимную функцию. И '.' относится к вводу анонимной функции, в данном случае data.framedf
.источник
sapply(name of the data, function(x) sum(is.na(x)))
источник
Вы можете использовать это для подсчета количества NA или пробелов в каждом столбце
colSums(is.na(data_set_name)|data_set_name == '')
источник