So gruppieren Sie einen Vektor in eine Liste von Vektoren?
Habe ich einige Daten, die sieht aus wie diese (gefälschte Daten, zum Beispiel halber):
dressId color
6 yellow
9 red
10 green
10 purple
10 yellow
12 purple
12 red
wo Farbe ist ein Faktor, der Vektor. Es ist nicht garantiert, dass alle möglichen Ebenen der Faktor, der tatsächlich in den Daten auftauchen (z.B. die Farbe "blau" könnte auch eine der Ebenen).
Brauche ich eine Liste von Vektoren, welche Gruppen mit den verfügbaren Farben für jedes Kleid:
[[1]]
yellow
[[2]]
red
[[3]]
green purple yellow
[[4]]
purple red
Erhaltung der IDs der Kleider wäre schön (z.B. ein dataframe, wo diese Liste in der zweiten Spalte und die IDs sind die ersten), ist aber nicht notwendig.
Schrieb ich eine Schleife, die geht durch den dataframe Zeile für Zeile, und während der nächsten ID ist die gleiche, es fügt Farbe zu einem Vektor. (Ich bin sicher, dass die Daten sortiert nach ID). Wenn die ID in der ersten Spalte ändert, dann wird der Vektor in eine Liste:
result <- NULL
while(blah blah)
{
some code which creates the vector called "colors"
result[[dressCounter]] <- colors
dressCounter <- dressCounter + 1
}
Nach dem Ringkampf mit dem Sie alle erforderlichen zähl-Variablen zu korrigieren, fand ich zu meiner Bestürzung, dass es nicht funktioniert. Das erste mal, colors
ist
[1] yellow
Levels: green yellow purple red blue
und es wird gezwungen in eine ganze Zahl, so result
wird 2
.
In der zweiten Schleife Wiederholung colors
enthält nur rot, und result
wird eine einfache integer-Vektor, [1] 2 4
.
In der Dritten Wiederholung, colors
ist ein Vektor nun,
[1] green purple yellow
Levels: green yellow purple red blue
bekommen und habe
result[[3]] <- colors
Fehler in result[[3]] <- Farben :
mehrere Elemente geliefert, als es zu ersetzen
Was mache ich falsch? Gibt es eine Möglichkeit zu initialisieren result
damit es nicht umgewandelt in einen numeric-Vektor, sondern eine Liste von Vektoren?
Außerdem ist es ein weiterer Weg, um die ganze Sache als "roll meine eigene"?
Du musst angemeldet sein, um einen Kommentar abzugeben.
split.data.frame
ist ein guter Weg, um zu organisieren; extrahieren Sie die Farb-Komponente.Ich denke, dass die version, die Sie wollen, ist eigentlich diese:
Können Sie etwas mehr wie die Liste, die Sie angefordert durch Extraktion der Farb-Komponente:
split
direkt und überspringen Sie dielapply
Schritt.split(d$color, d$dressId)
odersplit(as.character(d$color), d$dressId)
würde ausreichen.Neben
split
, sollten Sieaggregate
. Verwendenc
oderI
wie die aggregation-Funktion, um Ihrelist
Spalte:Hinweis: Dies funktioniert auch, wenn die "color" variable ist eine
factor
, wie in Ben-sample-Daten (ich verpasste den Punkt, als ich geschrieben, die Antwort oben), aber Sie verwenden müssenI
wie die aggregation-Funktion anstelle vonc
:Seltsam, aber das Standard-display zeigt die integer-Werte:
Vorausgesetzt, Ihre Daten-frame wird gespeichert in einer variable namens
df
, dann verwenden Sie einfachgroup_by
undsummarize
mitlist
Funktiondplyr
Paket wie diesesAngewendet auf dein Beispiel: