Anhängen von Zeilen an einen R-Datenrahmen
Ich habe mich auf StackOverflow umgesehen, aber ich kann keine Lösung für mein Problem finden, das das Anhängen von Zeilen an einen R-Datenrahmen beinhaltet.
Ich initialisiere einen leeren 2-spaltigen Datenrahmen, wie folgt.
df = data.frame(x = numeric(), y = character())
Mein Ziel ist es, eine Liste von Werten zu durchlaufen und bei jeder Iteration einen Wert an das Ende der Liste anzuhängen. Ich habe mit dem folgenden Code begonnen.
for (i in 1:10) {
df$x = rbind(df$x, i)
df$y = rbind(df$y, toString(i))
}
Ich habe auch die Funktionen c
, append
, und merge
ohne Erfolg ausprobiert. Bitte lassen Sie mich wissen, wenn Sie irgendwelche Vorschläge haben.
109
3
Aktualisierung
Da ich nicht weiß, was Sie vorhaben, möchte ich Ihnen noch einen Vorschlag machen: Weisen Sie Vektoren des gewünschten Typs für jede Spalte vor, fügen Sie Werte in diese Vektoren ein und erstellen Sie dann am Ende Ihr "data.frame".
Weiter mit Julian's
f3
(ein vorab zugewiesenerdata.frame
) als die schnellste Option bisher, definiert als:Lassen Sie uns die drei vorgeschlagenen Lösungen miteinander vergleichen:
Angenommen, Sie kennen die Größe des Datenrahmens nicht im Voraus. Es können durchaus ein paar Zeilen sein, aber auch ein paar Millionen. Sie brauchen eine Art von Container, der dynamisch wächst. Unter Berücksichtigung meiner Erfahrung und aller Antworten in SO komme ich auf 4 verschiedene Lösungen:
rbindlist
in den data.frameNutzen Sie die schnelle "Set"-Operation von "data.table" und koppeln Sie sie bei Bedarf mit der manuellen Verdopplung der Tabelle.
**Verwenden Sie "RSQLite" und fügen Sie an die im Speicher gehaltene Tabelle an.
4. "data.frame": eigene Fähigkeit zu wachsen und benutzerdefinierte Umgebung (mit Referenzsemantik) verwenden, um das data.frame zu speichern, damit es bei der Rückkehr nicht kopiert wird.
Hier ist ein Test aller Methoden für eine kleine und eine große Anzahl von angehängten Zeilen. Jede Methode hat 3 Funktionen, die mit ihr verbunden sind:
create(first_element)
, die das entsprechende Backing-Objekt mit dem eingefügtenfirst_element
zurückgibt.append(object, element)
, das dasElement
an das Ende der Tabelle anhängt (dargestellt durchobject
).access(object)
liefert dendata.frame
mit allen eingefügten Elementen.rbindlist
zum data.frameDas ist recht einfach und unkompliziert: