Elegancki sposób zgłaszania brakujących wartości w danych.ramka

Oto mały fragment kodu, który napisałem, aby zgłosić zmienne z brakującymi wartościami z ramki danych. Próbuję wymyślić bardziej elegancki sposób, który może zwrócić dane.kadr, ale utknąłem:

for (Var in names(airquality)) {
    missing <- sum(is.na(airquality[,Var]))
    if (missing > 0) {
        print(c(Var,missing))
    }
}

Edit: mam do czynienia z danymi.ramki z dziesiątkami do setek zmiennych, więc kluczowe jest, aby zgłaszać tylko zmienne z brakującymi wartościami.

Author: Zach, 2011-11-30

11 answers

Po prostu użyj sapply

> sapply(airquality, function(x) sum(is.na(x)))
  Ozone Solar.R    Wind    Temp   Month     Day 
     37       7       0       0       0       0

Można również użyć apply lub colSums na macierzy utworzonej przez is.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 
 124
Author: Joshua Ulrich,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-29 20:46:57

Bardziej zwięzły-: sum(is.na(x[1]))

To jest

  1. x[1] Spójrz na pierwszą kolumnę

  2. is.na() PRAWDA, jeśli jest NA

  3. sum() TRUE na 1, FALSE na 0

 5
Author: Keith Whittingham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-08-12 15:34:25

Możemy użyć map_df z purrr.

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
 5
Author: Keiku,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-27 02:58:29

Kolejna alternatywa graficzna- plot_missing funkcja z pakietu excellent DataExplorer:

Tutaj wpisz opis obrazka

Docs zwraca również uwagę na fakt, że można zapisać te wyniki do dodatkowej analizy za pomocą missing_data <- plot_missing(data).

 4
Author: radek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-13 02:12:53
summary(airquality)

Już daje te informacje

Pakiety VIM oferują również ładny wykres brakujących danych dla danych.frame

library("VIM")
aggr(airquality)

Tutaj wpisz opis obrazka

 3
Author: stats0007,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-13 02:16:13

Inną funkcją, która pomoże Ci spojrzeć na brakujące dane, będzie df_status z biblioteki funModeling

library(funModeling)
Iris.2 to zestaw danych iris z dodanym serwerem NAs.Możesz to zastąpić zestawem danych.
df_status(iris.2)

To da ci liczbę i procent NAs w każdej kolumnie.

 2
Author: Shahan Degamwala,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-02-06 06:28:30

Moim nowym faworytem dla (niezbyt szerokich) danych są metody z doskonałego pakietu naniar. Nie tylko dostajesz częstotliwości, ale także wzory missingness:

library(naniar)
library(UpSetR)

riskfactors %>%
  as_shadow_upset() %>%
  upset()

Tutaj wpisz opis obrazka

Jest to często przydatne, aby zobaczyć, gdzie brakuje w stosunku do nie brakuje, które można osiągnąć poprzez wykreślenie wykres punktowy z brakujących:

ggplot(airquality,
       aes(x = Ozone,
           y = Solar.R)) +
 geom_miss_point()

Tutaj wpisz opis obrazka

Lub dla zmiennych kategorycznych:

gg_miss_fct(x = riskfactors, fct = marital)

Tutaj wpisz opis obrazka

Te przykłady pochodzą z pakiet winieta {[5] } zawierający listę innych ciekawych wizualizacji.

 2
Author: radek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-02 07:09:52

Dla jeszcze jednego rozwiązania graficznego, visdat pakiet oferty vis_miss.

library(visdat)
vis_miss(airquality)

Tutaj wpisz opis obrazka

Bardzo podobne do Amelia wyjście z niewielką różnicą dawania %s na pominięcia po wyjęciu z pudełka.

 1
Author: radek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-13 02:15:41

Innym graficznym i interaktywnym sposobem jest użycie funkcji {[1] } z biblioteki heatmaply:

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"))

Tutaj wpisz opis obrazka

Prawdopodobnie nie będzie działać dobrze z dużymi zestawami danych..

 1
Author: radek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-27 04:05:58

Jeśli chcesz to zrobić dla konkretnej kolumny, możesz również użyć tego

length(which(is.na(airquality[1])==T))
 0
Author: Chintak Chhapia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-25 06:52:29

Myślę, że Biblioteka Amelia robi dobrą robotę w obsłudze brakujących danych zawiera również mapę do wizualizacji brakujących wierszy.

install.packages("Amelia")
library(Amelia)
missmap(airquality)

Tutaj wpisz opis obrazka

Można również uruchomić następujący kod zwróci wartości logiczne na

row.has.na <- apply(training, 1, function(x){any(is.na(x))})
 0
Author: drexxx,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-13 02:15:57