Hier ist ein kleiner Code, den ich geschrieben habe, um Variablen mit fehlenden Werten aus einem Datenrahmen zu melden. Ich versuche mir einen eleganteren Weg zu überlegen, der vielleicht einen data.frame zurückgibt, aber ich stecke fest:
for (Var in names(airquality)) {
missing <- sum(is.na(airquality[,Var]))
if (missing > 0) {
print(c(Var,missing))
}
}
Bearbeiten: Ich habe es mit data.frames mit Dutzenden bis Hunderten von Variablen zu tun, daher ist es wichtig, dass wir nur Variablen mit fehlenden Werten melden.
r
dataframe
missing-data
Zach
quelle
quelle
table
Zeichen und Sie müssten die Anzahl der NAs analysieren.Antworten:
Benutz einfach
sapply
> sapply(airquality, function(x) sum(is.na(x))) Ozone Solar.R Wind Temp Month Day 37 7 0 0 0 0
Sie können auch
apply
odercolSums
auf der von erstellten Matrix verwendenis.na()
> apply(is.na(airquality),2,sum) Ozone Solar.R Wind Temp Month Day 37 7 0 0 0 0 > colSums(is.na(airquality)) Ozone Solar.R Wind Temp Month Day 37 7 0 0 0 0
quelle
M <- sapply(airquality, function(x) sum(is.na(x))); M[M>0]
M <- colSums(is.na(airquality)); M[M <= 0]
Wir können
map_df
mit purrr verwenden.library(mice) library(purrr) # map_df with purrr map_df(airquality, function(x) sum(is.na(x))) # A tibble: 1 × 6 # Ozone Solar.R Wind Temp Month Day # <int> <int> <int> <int> <int> <int> # 1 37 7 0 0 0 0
quelle
map_df
übersapply
?map_df( air quality, ~sum(is.na(.) )
map_df
oversapply
ist nur, wenn das Ergebnis viele Zeilen enthält, da das Ausgabeformat von map_df immer ein tibble ist.vapply
vssapply
in Funktionen zu verwenden, davapply
Sie eine bekannte Ergebnisstruktur erhalten (die Sie angeben).sapply
kann abhängig von der Funktionsausgabe ein Array oder eine Liste zurückgeben. Ein Nachteil vonmap_df
ist, dass Sie ihm einen data.frame als Eingabe geben und eine data.frame-Unterklasse zurückgeben, keinen data.frame. Es gibt keine Garantie dafür, dass sich tibbles in Zukunft in allen erforderlichen Fällen wie data.frames verhalten.Mein neuer Favorit für (nicht zu breite) Daten sind Methoden aus einem exzellenten Naniar- Paket. Sie erhalten nicht nur Frequenzen, sondern auch Muster des Fehlens:
library(naniar) library(UpSetR) riskfactors %>% as_shadow_upset() %>% upset()
Es ist oft nützlich zu sehen, wo sich die Fehlschläge in Bezug auf Nicht-Fehlen befinden, was durch Zeichnen eines Streudiagramms mit Fehlschlägen erreicht werden kann:
Oder für kategoriale Variablen:
Diese Beispiele stammen aus einer Paketvignette , in der andere interessante Visualisierungen aufgeführt sind.
quelle
gg_miss_upset()
In der neuesten Version gibt es jetzt eine spezielle Funktion, die CRAN nach ihrer Rückkehr aus dem Urlaub übermittelt wird. naniar.njtierney.com/reference/gg_miss_upset.htmlgibt Ihnen diese Informationen bereits
Die VIM- Pakete bieten auch ein schönes Diagramm für fehlende Daten für data.frame
library("VIM") aggr(airquality)
quelle
Prägnanter:
sum(is.na(x[1]))
Das ist
x[1]
Schauen Sie sich die erste Spalte anis.na()
wahr, wenn es istNA
sum()
TRUE
ist1
,FALSE
ist0
quelle
NA
s für alle Spalten in den Daten zu findenEine weitere grafische Alternative -
plot_missing
Funktion aus ausgezeichnetemDataExplorer
Paket:Docs weist auch darauf hin, dass Sie diese Ergebnisse für zusätzliche Analysen mit speichern können
missing_data <- plot_missing(data)
.quelle
plot_missing()
Funktion imDataExplorer
Paket ist jetztPlotMissing()
.PlotMissing()
ist veraltet. Bitte verwenden Sieplot_missing()
stattdessen. Siehe # 49 für weitere Details.Eine weitere Funktion, mit der Sie fehlende Daten anzeigen können, ist df_status aus der funModeling-Bibliothek
library(funModeling)
iris.2 ist der Iris-Datensatz mit einigen hinzugefügten NAs. Sie können diesen durch Ihren Datensatz ersetzen.
Dies gibt Ihnen die Anzahl und den Prozentsatz der NAs in jeder Spalte.
quelle
Für eine weitere grafische Lösung bietet das
visdat
Paket Angebotevis_miss
.library(visdat) vis_miss(airquality)
Sehr ähnlich der
Amelia
Ausgabe mit einem kleinen Unterschied von% s bei Fehlschlägen.quelle
Ich denke, die Amelia-Bibliothek leistet gute Arbeit beim Umgang mit fehlenden Daten. Sie enthält auch eine Karte zur Visualisierung der fehlenden Zeilen.
install.packages("Amelia") library(Amelia) missmap(airquality)
Sie können auch den folgenden Code ausführen, der die logischen Werte von na zurückgibt
row.has.na <- apply(training, 1, function(x){any(is.na(x))})
quelle
Eine andere grafische und interaktive Möglichkeit ist die Verwendung der
is.na10
Funktion aus derheatmaply
Bibliothek:library(heatmaply) heatmaply(is.na10(airquality), grid_gap = 1, showticklabels = c(T,F), k_col =3, k_row = 3, margins = c(55, 30), colors = c("grey80", "grey20"))
Funktioniert wahrscheinlich nicht gut mit großen Datenmengen.
quelle
Wenn Sie dies für eine bestimmte Spalte tun möchten, können Sie dies auch verwenden
length(which(is.na(airquality[1])==T))
quelle
Mit der Paketfunktion von ExPanDaR
prepare_missing_values_graph
können Paneldaten untersucht werden:quelle
Eine
dplyr
Lösung, um die Zählung zu erhalten, könnte sein:Oder um einen Prozentsatz zu erhalten:
Vielleicht ist es auch erwähnenswert, dass fehlende Daten hässlich, inkonsistent und nicht immer
NA
abhängig von der Quelle oder der Art und Weise, wie sie beim Import behandelt werden, codiert werden können. Die folgende Funktion kann abhängig von Ihren Daten und dem, was Sie als vermisst betrachten möchten, optimiert werden:is_missing <- function(x){ missing_strs <- c('', 'null', 'na', 'nan', 'inf', '-inf', '-9', 'unknown', 'missing') ifelse((is.na(x) | is.nan(x) | is.infinite(x)), TRUE, ifelse(trimws(tolower(x)) %in% missing_strs, TRUE, FALSE)) } # sample ugly data df <- data.frame(a = c(NA, '1', ' ', 'missing'), b = c(0, 2, NaN, 4), c = c('NA', 'b', '-9', 'null'), d = 1:4, e = c(1, Inf, -Inf, 0)) # counts: > summarise_all(df, ~sum(is_missing(.))) a b c d e 1 3 1 3 0 2 # percentage: > summarise_all(df, ~(sum(is_missing(.) / nrow(df)))) a b c d e 1 0.75 0.25 0.75 0 0.5
quelle