Chcę policzyć liczbę NA
wartości w kolumnie ramki danych. Powiedzmy, że nazywa się moja ramka danych df
, a nazwa kolumny, którą rozważam, to col
. Sposób, który wymyśliłem, jest następujący:
sapply(df$col, function(x) sum(length(which(is.na(x)))))
Czy to dobry / najbardziej efektywny sposób, aby to zrobić?
value
, inną niżNA
zapisywanie funkcji boolowskiej,is.value
a następnie używaniesum(is.value(df$col))
sposobu, czy jest do tego bardziej zwięzła bezpośrednia składnia?sum(df$col==value,na.rm=FALSE)
Zrób sztuczkę.na.rm=TRUE
, ponieważ w przeciwnym razie, jeślidf$col
zawiera NA,sum
zwróciNA
.Jeśli szukasz
NA
zliczeń dla każdej kolumny w ramce danych, to:powinien dać ci listę z liczebnościami dla każdej kolumny.
Powinien ładnie wyświetlać dane w ramce danych, takiej jak:
źródło
na_count$name<-rownames(na_count)
.na_count <-sapply(x, function(y) sum(is.na(y)))
to krótsza alternatywa.Wypróbuj
colSums
funkcjęźródło
Jeśli chcesz policzyć liczbę NA w całej ramce danych, możesz również użyć
źródło
Na
summary()
wyjściu funkcja liczy równieżNA
s, więc można użyć tej funkcji, jeśli chce się sumęNA
s w kilku zmiennych.źródło
summary
wyjściowe używane w jednej kolumnie są użyteczne, podczas gdy ich wyjście z całej ramki danych jest znakowe, a liczby są trudne do wyodrębnienia, jeśli będą potrzebne później. Zobaczc(summary(mtcars))
.Prosty, zwrotny sposób zliczania wartości null w każdej kolumnie ramki danych:
źródło
df %>% summarise_all(funs(sum(is.na(.))))
df %>% map_df(~sum(is.na(.)))
lub bez dplyr asmap_df(~sum(is.na(df)))
Ta forma, nieco zmieniona od tej Kevina Ogorosa:
zwraca liczbę NA jako nazwaną tablicę int
źródło
na_count <-function (x) lapply(x, function(y) sum(is.na(y)))
Szybkim i łatwym rozwiązaniem Tidyverse, aby uzyskać
NA
liczbę wszystkich kolumn, jest użycie,summarise_all()
które moim zdaniem jest znacznie łatwiejsze do odczytania niż użyciepurrr
lubsapply
źródło
Spróbuj tego:
źródło
Odpowiedź użytkownika rrs jest prawidłowa, ale to tylko mówi o liczbie wartości NA w określonej kolumnie ramki danych, którą przekazujesz, aby uzyskać liczbę wartości NA dla całej ramki danych, spróbuj tego:
To załatwia sprawę
źródło
apply(df, 2, function(x) sum(is.na(x)))
Czytałem plik csv z katalogu lokalnego. Poniższy kod działa dla mnie.
źródło
Podobna do odpowiedzi hute37, ale przy użyciu
purrr
pakietu. Myślę, że to uporządkowane podejście jest prostsze niż odpowiedź zaproponowana przez AbiK.Uwaga: tylda (
~
) tworzy anonimową funkcję. A „.” odnosi się do wejścia dla funkcji anonimowej, w tym przypadku data.framedf
.źródło
Możesz użyć tego do zliczenia liczby NA lub spacji w każdej kolumnie
źródło
źródło