2016-07-08 14 views
0

die folgenden Datenrahmen als ein Beispiel zu haben:Merge Datenrahmen Zeilen mit dem gleichen Namen

data_ = data.frame(name = c("name1", "name2","name1"), product = c("product1", "product2", "product3")) 

Die Ausgabe lautet:

name1 product1 
name2 product2 
name1 product3 

Ich mag es Zeilen, die von den gleichen Namen verschmelzen. Daher sieht das Ergebnis wie:

name1 product1, product3 
name2 product2 

ich verwende R 2.15.2, so kann ich nicht aggregate

+0

reshape2 :: dcast (data_, name ~ product) – Arcoutte

Antwort

2

vielleicht die natürliche Art und Weise diese Daten zu speichern ist als eine Liste, weil es Es wird eine unterschiedliche Anzahl von Elementen pro Name geben. Hier ist ein Weg, um eine benannte Liste mit Zeichenvektoren für Ihre Produkte zu erhalten:

lapply(split(data_, data_$name), function(i) {i$name <- NULL; as.character(unlist(i))}) 
$name1 
[1] "product1" "product3" 

$name2 
[1] "product2" 

I umgewandelt, die Produkte zu Zeichen, die typischerweise leichter sind mit der Verwendung von as.character zu arbeiten, obwohl dies nicht notwendig ist.

Im ursprünglichen Beispiel war das Objekt data_ ein Datenrahmen. Allerdings, wenn es eine Liste, dann wird der Code Ereignis einfacher:

# build list 
data_ = list(name = c("name1", "name2","name1"), product = c("product1", "product2", "product3")) 

# split list along names variable: 
split(data_$product, data_$name) 
$name1 
[1] "product1" "product3" 

$name2 
[1] "product2" 

Welches ist das gleiche wie oben, aber wir haben nicht die zusätzliche Struktur zu entladen als begleitet einen Datenrahmen mit einem Faktor variable Aufteilung .

+1

Siehe meine zusätzlichen Kommentare, wie dies funktionieren würde, wenn data_ eine Liste wäre. – lmo

Verwandte Themen