Obsługa brakujących/niekompletnych Danych W R--czy istnieje funkcja do maskowania, ale nie usuwania NAs?
Jak można się spodziewać po DSL przeznaczonym do analizy danych, R radzi sobie bardzo dobrze z brakującymi/niekompletnymi danymi, na przykład:
Wiele funkcji R ma na,rm zaznacz, że po ustawieniu na TRUE Usuń NAs:
>>> v = mean( c(5, NA, 6, 12, NA, 87, 9, NA, 43, 67), na.rm=T)
>>> v
(5, 6, 12, 87, 9, 43, 67)
Ale jeśli chcesz mieć do czynienia z NAs przed wywołaniem funkcji, musisz zrobić coś takiego:
Aby usunąć każde "NA" z wektora:
vx = vx[!is.na(a)]
Aby usunąć każde "NA" z wektora i zastąpić je w / a '0':
ifelse(is.na(vx), 0, vx)
Aby usunąć cały wiersz zawierający "NA" z ramki danych:
dfx = dfx[complete.cases(dfx),]
Wszystkie te funkcje na stałeusuwają 'NA' lub wiersze z 'NA' w nich.
Czasami jednak nie jest to dokładnie to, czego chcesz-wykonanie kopii " NA " -wyciętej ramki danych może być konieczne do następnego kroku w obiegu pracy, ale w kolejnych krokach często chcesz odzyskać te wiersze (np. wcześniejsze wywołanie 'complete cases', ale ta kolumna nie ma w sobie wartości 'NA').
Aby było jak najbardziej jasne, czego szukam: python/numpy ma klasę masked array, z metodą mask, która pozwala ukryć--ale nie usunąć--NAs podczas wywołania funkcji. Czy istnieje analogiczna Funkcja W R?
3 answers
Co dokładnie zrobić z brakującymi danymi -- które mogą być oznaczone jako NA
jeśli wiemy, że ich brakuje -- mogą się różnić w zależności od domeny.
Aby wziąć przykład związany z szeregami czasowymi, gdzie można pominąć, wypełnić, interpolować, lub interpolować inaczej, ... czy po prostu (bardzo przydatne i popularne) zoo posiada wszystkie te funkcje związane z obsługąNA
:
zoo::na.approx zoo::na.locf
zoo::na.spline zoo::na.trim
Pozwalający na przybliżenie (przy użyciu różnych algorytmów), przeniesienie lub do tyłu, użyj interpolacji splajnu lub przycięcia.
Innym przykładem mogą być liczne brakujące pakiety imputacji na CRAN - często dostarczające rozwiązania specyficzne dla domeny. [Więc jeśli nazywasz R DSL, co to jest? "Rozwiązania specyficzne dla subdomen dla języków specyficznych dla domen" lub SDSSFDSL? Całkiem niezłe:)] [[6]}
Ale dla Twojego konkretnego pytania: Nie, Nie znam znacznika poziomu bitowego w bazie R, który pozwala oznaczyć obserwacje jako "do wykluczenia". Przypuszczam, że większość użytkowników R do funkcji takich jak na.omit()
et al lub użyj opcji na.rm=TRUE
, o której wspomniałeś.
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
2012-11-02 14:50:51
Jest to dobra praktyka, aby spojrzeć na dane, stąd wnioskować o rodzaju brakujących wartości: czy MCAR( missing complete and random), MAR (missing at random) lub MNAR (missing not at random)? Na podstawie tych trzech typów można zbadać podstawową strukturę brakujących wartości i stwierdzić, czy imputacja jest w ogóle stosowana (masz szczęście, jeśli nie jest MNAR, ponieważ w takim przypadku brakujące wartości są uważane za nie-ignorowalne i są związane z jakimś nieznanym podstawowym wpływem, czynnikiem, proces, zmienna... nieważne).
Rozdział 3. w "interaktywna i dynamiczna Grafika dla analityka danych z R i GGobi" przez Di Cook i Deborah Swayne jest świetnym odniesieniem do tego tematu.
Zobaczysz norm
pakiet w akcji w tym rozdziale, ale Hmisc
pakiet ma procedury imputacji danych. Amelia
, cat
(w przypadku kategorycznych braków przypisyzobacz też), mi
, mitools
, VIM
, vmv
(do wizualizacji brakujących danych).
Szczerze, Nadal nie do końca rozumiem twoje pytanie o statystyki, czy o możliwości przypisywania danych R? Myślę, że podałem dobre referencje na drugim i o pierwszym: możesz zastąpić swoje NA albo z tendencją centralną( średnia, mediana lub podobne), a tym samym zmniejszyć zmienność, lub z losową stałą "wyciągniętą" obserwowanych (zarejestrowanych) przypadków, lub możesz zastosować analizę regresji ze zmienną, która zawiera NA jako kryteria, a inne zmienne jako predyktory, następnie przypisać pozostałości do NA ' s... to elegancki sposób radzenia sobie z NA, ale dość często nie pójdzie łatwo na procesorze (mam Celeron Na 1.1 GHz, więc muszę być delikatny).
Jest to problem optymalizacji... nie ma jednoznacznej odpowiedzi, powinieneś zdecydować,co / dlaczego trzymasz się jakiejś metody. Ale zawsze dobrze jest patrzeć na dane! =) Koniecznie sprawdź Cook & Swayne - to doskonały, umiejętnie napisany przewodnik. "Modele liniowe z R" przez Faraway zawiera również rozdział o brakujących wartościach.
Więc tam.
Powodzenia! =)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
2010-06-08 03:03:10
Funkcja na.exclude()
brzmi tak, jak chcesz, chociaż jest to tylko opcja dla niektórych (ważnych) funkcji.
W kontekście dopasowania i pracy z modelami, R ma rodzinę ogólnych funkcji do czynienia z NAs: na.fail()
, na.pass()
, na.omit()
, i na.exclude()
. Są to z kolei argumenty dla niektórych kluczowych funkcji modelowania R, takich jak lm()
, glm()
, i nls()
, jak również funkcje w pakietach MASS, rpart i survival.
Wszystkie cztery funkcje ogólne działają w zasadzie jak filtry. na.fail()
przekaże dane tylko wtedy, gdy nie ma serwera NAs, w przeciwnym razie nie powiedzie się. Przepuszcza wszystkie sprawy. na.omit()
i na.exclude()
opuszczą sprawy z NAs i przepuszczą Pozostałe sprawy. Ale na.exclude()
ma inny atrybut, który mówi funkcjom przetwarzającym wynikowy obiekt, aby uwzględniały NAs. Możesz zobaczyć ten atrybut, jeśli zrobiłeś attributes(na.exclude(some_data_frame))
. Oto demonstracja tego, jak na.exclude()
zmienia zachowanie predict()
w kontekście modelu liniowego.
fakedata <- data.frame(x = c(1, 2, 3, 4), y = c(0, 10, NA, 40))
## We can tell the modeling function how to handle the NAs
r_omitted <- lm(x~y, na.action="na.omit", data=fakedata)
r_excluded <- lm(x~y, na.action="na.exclude", data=fakedata)
predict(r_omitted)
# 1 2 4
# 1.115385 1.846154 4.038462
predict(r_excluded)
# 1 2 3 4
# 1.115385 1.846154 NA 4.038462
Twój default na.akcja, nawiasem mówiąc, jest określona przez options("na.action")
i zaczyna się jako na.omit()
, ale można ją ustawić.
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-05-13 18:30:07