2014-09-11 2 views
10

voglio eseguire group_by e fare un'operazione di stringa per un frame di dati utilizzando dplyrString Manipulation/Agrégation in dplyr

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

voglio l'uscita (newdf) per assomigliare a questo:

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

ho provato quanto segue in dplyr

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

provato anche il seguente:

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

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

Posso farlo utilizzando il funzionamento del frame di dati di base. Hai bisogno di aiuto per capire una via d'uscita in dplyr.

+4

'df%>% group_by (VARx)%>% riassumere (Caty = pasta (variare, collasso = ""))'. "incolla" ti dà un vettore, quindi devi "collassare" nel vettore di un carattere dimensionale –

+0

Grazie David ... Ha funzionato ... – Pradeep

+0

Grazie David, perché non scrivi questo commento come risposta? Quindi sarà promosso meglio. –

risposta

10

La versione leggermente più corta del commento di David sarebbe:

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

Vuoi vedere qualche output funky, controlla 'df%>% group_by (varx)%>% do (data.frame (catY = list (. $ Vary)))' –

+0

haha, è bello (forse ' dplyr :: do' non è ancora completamente maturo?) @RichardScriven –

+0

Beh, è ​​anche un'operazione piuttosto inutile che ho provato –