2016-07-13 10 views
4

Ich habe ein Datenrahmen wie folgt aus:Gruppe von Spalten und eine Spalte in einer Liste zusammenfassen

sample_df<-data.frame(
    client=c('John', 'John','Mary','Mary'), 
    date=c('2016-07-13','2016-07-13','2016-07-13','2016-07-13'), 
    cluster=c('A','B','A','A')) 

#sample data frame 
    client date   cluster 
1 John 2016-07-13 A 
2 John 2016-07-13 B 
3 Mary 2016-07-13 A 
4 Mary 2016-07-13 A    

Ich würde es in anderes Format umwandeln möchten, die wie wird sein: Für

#ideal data frame 
    client date   cluster 
1 John 2016-07-13 c('A,'B') 
2 Mary 2016-07-13 A 

In der Spalte "Cluster" wird eine Liste angezeigt, wenn ein Client zu demselben Datum zu einem anderen Cluster gehört.

Ich dachte, ich es mit dplyr Paket mit commend jedoch wie unten

library(dplyr) 
ideal_df<-sample %>% 
    group_by(client, date) %>% 
    summarize(#some anonymous function) 

tun kann, ich weiß nicht, wie die anonyme Funktion in dieser Situation zu schreiben. Gibt es eine Möglichkeit, die Daten in das ideale Format zu verwandeln?

Antwort

7

Wir toString verwenden können, die unique Elemente in 'Cluster' zusammen, nachdem die Gruppierung von 'Kunden'

r1 <- sample_df %>% 
     group_by(client, date) %>% 
     summarise(cluster = toString(unique(cluster))) 

Oder eine andere Option verketten eine list Spalte

r2 <- sample_df %>% 
     group_by(client, date) %>% 
     summarise(cluster = list(unique(cluster))) 

schaffen würde, die wir kann unnest

library(tidyr) 
r2 %>% 
    ungroup %>% 
    unnest() 
+1

Vielen Dank @akrun! Es funktionierte. –