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?
Sie überdenken das Problem:
sum(is.na(df$col))
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
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
Wenn Sie die Anzahl der NAs im gesamten Datenrahmen zählen möchten, können Sie diese auch verwenden
sum(is.na(df))
In der Ausgabe von summary()
zählt die Funktion auch die NA
s, sodass man diese Funktion verwenden kann, wenn man die Summe von NA
s in mehreren Variablen haben möchte.
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)
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
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
Versuche dies:
length(df$col[is.na(df$col)])
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
Ä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.
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 == '')