web-dev-qa-db-de.com

Bestimmen Sie die Anzahl der NA-Werte in einer Spalte

Ich möchte die Anzahl der NA Werte in einer Datenrahmenspalte zählen. Angenommen, mein Datenrahmen heißt df, und der Name der Spalte, die ich in Betracht ziehe, ist col. Die Art und Weise, wie ich darauf gekommen bin, ist folgende:

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

Ist dies ein guter/effizientester Weg, um dies zu tun?

118
user3274289

Sie überdenken das Problem:

sum(is.na(df$col))
281
rrs

Wenn Sie nach NA suchen, zählt für jede Spalte in einem Datenrahmen Folgendes:

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

sollten Sie eine Liste mit den Zählungen für jede Spalte geben.

na_count <- data.frame(na_count)

Sollte die Daten schön in einem Datenrahmen ausgeben wie:

----------------------
| row.names | na_count
------------------------
| column_1  | count
72
Kevin Ogoro

Probieren Sie die Funktion colSums aus

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

colSums(is.na(df))

#x y 
#1 3 
27
Tony Ladson

Wenn Sie die Anzahl der NAs im gesamten Datenrahmen zählen möchten, können Sie diese auch verwenden

sum(is.na(df))
17
bkielstr

In der Ausgabe von summary() zählt die Funktion auch die NAs, sodass man diese Funktion verwenden kann, wenn man die Summe von NAs in mehreren Variablen haben möchte.

12
Shahin

Ein einfacher Weg, um die Anzahl der Nullen in jeder Spalte eines Datenrahmens zu zählen:

library(tidyverse)
library(purrr)

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

Diese Form, leicht verändert von der von Kevin Ogoros:

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

gibt NA-Zähler als benanntes int-Array zurück

7
hute37

Die Antwort von Benutzer rrs ist richtig, gibt jedoch nur die Anzahl der NA-Werte in der jeweiligen Spalte des Datenrahmens an, die Sie übergeben, um die Anzahl der NA-Werte für den gesamten Datenrahmen zu ermitteln. Versuchen Sie Folgendes:

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

Das macht den Trick

3
iec2011007

Versuche dies:

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

Ich habe eine csv Datei aus dem lokalen Verzeichnis gelesen. Der folgende Code funktioniert für mich.

# 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
reza.cse08

Ähnlich wie die Antwort von hute37, aber mit der Schnurrbibliothek. Ich denke, dieser tidyverse Ansatz ist einfacher als die von AbiK vorgeschlagene Antwort.

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

Hinweis: Die Tilda erstellt eine anonyme Funktion. Und das '.' bezieht sich auf die Eingabe für die anonyme Funktion. In diesem Fall ist der data.frame df.

1
Chris Kiniry

Sie können dies verwenden, um die Anzahl der NA oder Leerzeichen in jeder Spalte zu zählen

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