2014-09-11 16 views
10

Chcę wykonać group_by i zrobić operację strun do ramki danych przy użyciu dplyrString Manipulation/agrégation w dplyr

df<-data.frame(varx=c("x1","x1","x2","x2","x2"),vary=c("y1","y2","y3","y4","y5")) 

chcę wyjściowy (newdf), aby wyglądać tak:

newdf <- data.frame(varx=c("x1","x2"),catY=c("y1,y2","y3,y4,y5")) 

próbowałem następujących w dplyr

df %>% group_by(varx)%>%summarise(catY=paste(vary)) 
Error: expecting a single value 

próbowali również:

df %>% group_by(varx)%>%mutate(catY=paste(vary)) 

Source: local data frame [5 x 3] 
Groups: varx 

Mogę to zrobić przy użyciu podstawowej operacji na ramce danych. Potrzebujesz pomocy w zrozumieniu wyjścia w dplyr.

+4

'df%>% group_by (varX)%>% Podsumuj (Caty = pasta (różnią się, zapaść = ""))'. "wklej" daje wektor, więc musisz "zwinąć" go w jednowymiarowy wektor znaków. –

+0

Dzięki David ... To zadziałało ... – Pradeep

+0

Dziękuję David, dlaczego nie napiszesz tego komentarza jako odpowiedzi? Więc będzie lepiej promowany. –

Odpowiedz

10

Nieco krótsza wersja komentarza Dawida byłoby:

library(dplyr) 
df %>% group_by(varx) %>% summarise(catY = toString(vary)) 

#Source: local data frame [2 x 2] 
# 
# varx  catY 
#1 x1  y1, y2 
#2 x2 y3, y4, y5 
+1

Chcesz zobaczyć jakieś funky wyjściowe, sprawdź 'df%>% group_by (varx)%>% do (data.frame (catY = lista (. $ Vary)))' –

+0

haha, to jest ładne (może) dplyr :: do' nie jest jeszcze w pełni dojrzałym?) @RichardScriven –

+0

Cóż, jest to również całkiem bezużyteczna operacja, którą próbowałem –