2014-10-30 18 views
39

Próbowałem usunąć NA z podzbioru za pomocą dplyr piping. Czy moja odpowiedź jest oznaką pominiętego kroku? Próbuję dowiedzieć się, jak napisać funkcje za pomocą dplyr:Usuwanie NA w dplyr pipe

> outcome.df%>% 
+ group_by(Hospital,State)%>% 
+ arrange(desc(HeartAttackDeath,na.rm=TRUE))%>% 
+ head() 
Source: local data frame [6 x 5] 
Groups: Hospital, State 
 
          Hospital State HeartAttackDeath 
1  ABBEVILLE AREA MEDICAL CENTER SC    NA 
2  ABBEVILLE GENERAL HOSPITAL LA    NA 
3  ABBOTT NORTHWESTERN HOSPITAL MN    12.3 
4 ABILENE REGIONAL MEDICAL CENTER TX    17.2 
5  ABINGTON MEMORIAL HOSPITAL PA    14.3 
6 ABRAHAM LINCOLN MEMORIAL HOSPITAL IL    NA 
Variables not shown: HeartFailureDeath (dbl), PneumoniaDeath 
    (dbl) 
+0

Myślę, że masz tam niewłaściwą bibliotekę. Gdzie są dane? –

+1

Dlaczego nie 'na.omit'? – isomorphismes

+1

Istnieje również http://stackoverflow.com/questions/22353633/filter-for-complete-cases-in-data-frame-using-dplyr-case-wise-deletion/37031161#37031161, które odpowiadają na to samo pytanie. –

Odpowiedz

75

Nie sądzę desc bierze na.rm argumentu ... Jestem naprawdę zaskoczony, że nie wygeneruje błąd, kiedy daj mu jeden. Jeśli chcesz tylko usunąć NA, skorzystaj na.omit:

outcome.df %>% 
    na.omit() %>% 
    group_by(Hospital, State) %>% 
    arrange(desc(HeartAttackDeath)) %>% 
    head() 

Jeśli chcesz tylko usunąć NA s z kolumny HeartAttackDeath, filtr z is.na:

outcome.df %>% 
    filter(!is.na(HeartAttackDeath)) %>% 
    group_by(Hospital, State) %>% 
    arrange(desc(HeartAttackDeath)) %>% 
    head() 

Jak wskazano w dupe, Można również użyć complete.cases, ale nieco trudniej jest wstawić łańcuch, ponieważ przyjmuje on ramkę danych jako argument, ale zwraca wektor indeksu. Możesz więc użyć go tak:

outcome.df %>% 
    filter(complete.cases(.)) %>% 
    group_by(Hospital, State) %>% 
    arrange(desc(HeartAttackDeath)) %>% 
    head() 
+0

Wielkie dzięki. Użyłem na.omit dla wszystkich kolumn i zadziałało. result.df to podzestaw dużego zbioru danych. Próbuję uporządkować warunki w kolejności od najlepszego do najgorszego. – ITCoderWhiz

+0

Kiedy używam na.omit w ten sposób, wyskakuje komunikat "Błąd w na.omit.default()" obiekt "nie ma wartości domyślnej, nawet jeśli zasilam go hflights. Takie samo zachowanie z! Is.na (hflights) na drugim etapie potoku ... @ ITCoderWhiz – d8aninja

+0

@ D8Amonk brzmi, jakbyś miał pewne maskowanie funkcji. Ze świeżej biblioteki sesji 'd (dplyr); biblioteka (hflights); x = hflights%>% na.omit() 'działa dobrze. Może załadowałeś pakiet, który ma własną funkcję 'na.omit'? – Gregor