2015-02-26 9 views
7

Ho uno data_frame dove desidero che vector sia la concatenazione di elementi in A. Cosìutilizzare dplyr per concatenare una colonna

df <- data_frame(id = c(1, 1, 2, 2), A = c("a", "b", "b", "c")) 
df 
Source: local data frame [4 x 2] 

    id A 
1 1 a 
2 1 b 
3 2 b 
4 2 c 

dovrebbe diventare

newdf 
Source: local data frame [4 x 2] 

    id vector 
1 1 "a b" 
2 2 "b c" 

Il mio primo istinto è quello di utilizzare paste() all'interno summarise, ma questo non funziona.

df %>% group_by(id) %>% summarise(paste(A)) 
Error: expecting a single value 

Hadley e Romain parlare di un problema simile nei GitHub problemi, ma non riesco a vedere come si applica direttamente. Sembra che ci dovrebbe essere una soluzione molto semplice, in particolare perché paste() di solito restituisce un valore singolo.

+0

Date un'occhiata [qui] (http://stackoverflow.com/questions/2752323/r-how-can-i-concatenate-a-vector) –

risposta

13

È necessario comprimere i valori in pasta

df %>% group_by(id) %>% summarise(vector=paste(A, collapse=" ")) 
+0

Wow , va bene. Non ho mai usato 'collasso' perché sembra terribilmente simile a' sep'. Questo è il tipo di cosa che amo di R! – gregmacfarlane

1

mio frame di dati è stato come:
col2 col1

1   one 
1   one more 
2   two 
2   two 
3   three 

avevo bisogno di riassumere come segue:

col3 col1

1   one, one more 
2   two 
3   three 

Questo codice seguente ha fatto il trucco:

df <- data.frame(col1 = c(1,1,2,2,3), col2 = c("one", "one more", "two", "two", "five")) 

    df %>% 
      group_by(col1) %>% 
      summarise(col3 = toString(unique(col2))) 
+0

Ma questo essenzialmente lo renderà una stringa. Una stringa separata da virgola. Come ottenere dati come 1. Design_ID 2. Vettore di disegni non valori separati da virgola. –

Problemi correlati