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.
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
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
-
x[1]
Spójrz na pierwszą kolumnę is.na()
PRAWDA, jeśli jestNA
sum()
TRUE
na1
,FALSE
na0
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
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
:
Docs zwraca również uwagę na fakt, że można zapisać te wyniki do dodatkowej analizy za pomocą missing_data <- plot_missing(data)
.
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)
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.
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()
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()
Lub dla zmiennych kategorycznych:
gg_miss_fct(x = riskfactors, fct = marital)
Te przykłady pochodzą z pakiet winieta {[5] } zawierający listę innych ciekawych wizualizacji.
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)
Bardzo podobne do Amelia
wyjście z niewielką różnicą dawania %s na pominięcia po wyjęciu z pudełka.
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"))
Prawdopodobnie nie będzie działać dobrze z dużymi zestawami danych..
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))
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)
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))})
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