Bir sütundaki NA değerlerinin sayısını belirleme


143

NABir veri çerçevesi sütunundaki değer sayısını saymak istiyorum . Veri çerçevemin çağrıldığını dfve düşündüğüm sütunun adının olduğunu söyle col. Geldiğim yol şudur:

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

Bunu yapmanın iyi / verimli bir yolu var mı?

Yanıtlar:


316

Sorunu aşırı düşünüyorsun:

sum(is.na(df$col))

Bunun için teşekkür ederim. Bunu biraz genişletmek için. Keyfi saymak value, NAbir boolean fonksiyon yazmak is.valueve sonra sum(is.value(df$col))gitmek için yol kullanmak dışında veya bunun için daha özlü bir doğrudan sözdizimi var mı?
user3274289

3
Sormak için çok hızlı oldu. sum(df$col==value,na.rm=FALSE)hile yapar.
user3274289

4
@ user3274289: genellikle isteyeceğiniz na.rm=TRUEhalde, aksi takdirde NA'lar df$coliçeriyorsa sumgeri dönecektir NA.
jbaums

1
Bazen bu cevabı
alana

üzgünüm ama bu benim için çalışmıyor. Bu uyarıyı alıyorum Uyarı iletisi: is.na (nom $ wd): is.na () 'NULL' türünde olmayan (liste veya vektör) uygulandı ve sayı sadece sıfır.
Herman Toothrot

77

Bir veri çerçevesindeki NAher sütun için sayım arıyorsanız :

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

size her sütun için sayıları içeren bir liste vermelidir.

na_count <- data.frame(na_count)

Verileri şöyle bir veri çerçevesinde güzelce çıktılamalıdır:

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

1
Satır adlarını sütun olarak eklemek için de çalıştırın na_count$name<-rownames(na_count).
Matt

6
na_count <-sapply(x, function(y) sum(is.na(y)))daha kısa bir alternatiftir.
Vincent Bonhomme

1
Benim için çalışmadı :( Bunu değiştirmek zorunda kaldım: na_count <- uygulamak (x, işlev (y) toplamı (is.na (y)), MARGIN = 2)
Angel Garcia Campos

Toplam ve uzunluk işlevini (ilk na_count atamasında) kullanmamız gerektiğini düşünmüyorum? Sadece uzunluk yeterli olmalıdır.
Yandle

40

colSumsİşlevi deneyin

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

colSums(is.na(df))

#x y 
#1 3 

18

Tüm veri çerçevesindeki NA sayısını saymak istiyorsanız,

sum(is.na(df))

13

Gelen summary()çıkış, fonksiyon aynı zamanda sayar NAbiri toplamını istiyorsa kimse bu işlevi kullanın, böylece s NAçeşitli değişkenlerde s.


2
Worth belirterek summarybütün bir veri çerçevesinden çıkış karakteridir ve sayıları daha sonra onları gerekirse ayıklamak zor iken tek bir sütun üzerinde kullanılan çıkış, kullanışlı olduğunu. Bkz c(summary(mtcars)).
Zengin Scriven

9

Bir veri çerçevesinin her sütunundaki null sayısını saymanın düzenli bir yolu:

library(tidyverse)
library(purrr)

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

3
Purrr bile gerekmez:df %>% summarise_all(funs(sum(is.na(.))))
David Bruce Borenstein

Benim gibi tembelseniz, @Abi K'nin cevabına biraz daha kısa purrr sözdiziminde şöyle yazabilirsiniz: df %>% map_df(~sum(is.na(.)))veya dplyr olmadanmap_df(~sum(is.na(df)))
Agile Bean

7

Kevin Ogoros'un formundan biraz değişmiş olan bu form:

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

NA sayılarını adlandırılmış int dizisi olarak döndürür


liste olarak sonuç almak için:na_count <-function (x) lapply(x, function(y) sum(is.na(y)))
hute37

7

Bir almak için hızlı ve kolay bir Tidyverse çözümü NAtüm sütunlar için sayımı kullanımına olan summarise_all()ben kullanmaktan daha çözüm okumak için çok daha kolay hale getirir düşünmek purrrveyasapply

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


3

Kullanıcı rrs yanıtı doğrudur, ancak yalnızca veri çerçevesinin belirli bir sütundaki NA değerlerinin sayısını, tüm veri çerçevesi için NA değerlerinin sayısını almak için şunu söyler:

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

Bu hile yapar


Bu kodu işlevsel olmayan yapan bazı yazım hataları vardır. Bunu dene; apply(df, 2, function(x) sum(is.na(x)))
user3495945

3

Yerel dizinden bir csv dosyası okudum . Aşağıdaki kod benim için çalışıyor.

# 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

2

Hute37'nin cevabına benzer, ancak purrrpaketi kullanıyor . Bence bu düzenli yaklaşım AbiK tarafından önerilen cevaptan daha basit.

library(purrr)
map_dbl(df, ~sum(is.na(.)))

Not: tilde ( ~), anonim bir işlev oluşturur. Ve '.' "anonim" işlevinin girdisini, bu durumda data.frame öğesini belirtir df.


0

Bunu, her sütundaki NA veya boşluk sayısını saymak için kullanabilirsiniz

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.