2016-04-01 13 views
0

Ich versuche, eine neue Spalte wie unten beschrieben zu erstellen. die d's entsprechen eigentlich Daten und V2 sind Ereignisse an den angegebenen Daten. Ich muss die Ereignisse für das angegebene Datum sammeln. V3 ist eine einzelne Spalte, deren Zeileneinträge eine Verkettung sind. Danke im Voraus. Mein Versuch funktioniert nicht.Erstellen einer neuen Spalte mit mehreren Elementen nach group_by

df = V1 V2 
     d1 U 
     d2 M 
     d1 T 
     d1 Q 
     d2 P 

df gewünschten

df.1 = V1  V3 
     d1  U,T,Q 
     d2  M,P 


df.1 <- df %>% group_by(., V1) %>% 
     mutate(., V3 = c(distinct(., V2))) %>% 
     as.data.frame 

Der obige Code resultierenden Ergebnisse in der folgenden Fehler; ignorieren die 15 und 1s - sie sind spezifisch für meine eigentliche Code

Error: incompatible size (15), expecting 1 (the group size) or 1 

Antwort

0

Es ermöglicht nicht ein Vektor als ein Element in Datenrahmen. Anstatt also c() zu verwenden, können Sie mit paste Elemente als eine einzige Zeichenfolge verketten.

df.1 <- df %>% group_by(V1) %>% mutate(V3 = paste(unique(V2), collapse = ",")) %>% select(V1, V3) %>% unique() %>% as.data.frame()

+0

Was wäre die einzige() ohne Eingabe tun? – mbs1

+0

Die Eingabe der Funktion unique() ist hier die Eingabe von%>% davor. Es ist also einzigartig (.), Und die. Hier kann weggelassen werden, genauso wie 'df%>% group_by (., V1)' als 'df%>% group_by (V1)' geschrieben werden kann und df das erste Argument der group_by-Funktion ist. – Psidom

1

Sie Aggregat wie folgt verwenden können:

df.1 <- aggregate(V2~V1,paste,collapse=",",data=df) 

# V1 V2 
# 1 d1 U,T,Q 
# 2 d2 M,P 
0

noch mit dplyr, können Sie versuchen:

df %>% group_by(V1) %>% summarize(V3 = paste(unique(V2), collapse=", ")) 
Verwandte Themen