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 .
reshape2 :: dcast (data_, name ~ product) – Arcoutte