2014-09-11 8 views
10

Ich mag group_by auszuführen und eine String-Operation für einen Datenrahmen zu tun mit dplyrString-Bearbeitung/Agregation in dplyr

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

ich die Ausgabe (newdf) will wie folgt aussehen:

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

ich habe versucht, die folgenden in dplyr

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

auch versucht, die folgenden:

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

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

Ich kann es mit grundlegenden Datenrahmenoperation tun. Brauchen Sie Hilfe, um einen Ausweg in dplyr zu verstehen.

+4

'df%>% group_by (VARx)%>% summarize (Caty = Paste (variieren, Kollaps = ""))'. "Paste" gibt Ihnen einen Vektor, so dass Sie es in eindimensionalen Zeichenvektor "zusammenbrechen" müssen –

+0

Danke David ... Das hat funktioniert ... – Pradeep

+0

Danke David, warum schreibst du diesen Kommentar nicht als Antwort? Es wird also besser gefördert werden. –

Antwort

10

Die etwas kürzere Version von Davids Kommentar wäre:

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

Sie wollen etwas funky Ausgabe sehen, check out 'df%>% group_by (varx)%>% do (data.frame (catY = list (. $ Vary))) –

+0

haha, das ist ein netter (vielleicht' dplyr :: do ist noch nicht voll ausgereift?) @RichardScriven –

+0

Nun, das ist auch eine ziemlich nutzlose Operation, die ich ausprobiert habe –