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.

Lösung

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 zugewiesener data.frame) als die schnellste Option bisher, definiert als:


# pre-allocate space
f3 
Kommentare (7)

Lassen Sie uns die drei vorgeschlagenen Lösungen miteinander vergleichen:


# use rbind
f1 
Kommentare (4)

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:

  1. rbindlist in den data.frame

  2. Nutzen Sie die schnelle "Set"-Operation von "data.table" und koppeln Sie sie bei Bedarf mit der manuellen Verdopplung der Tabelle.

  3. **Verwenden Sie "RSQLite" und fügen Sie an die im Speicher gehaltene Tabelle an.

  4. 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ügten first_element zurückgibt.

  • append(object, element), das das Element an das Ende der Tabelle anhängt (dargestellt durch object).

  • access(object) liefert den data.frame mit allen eingefügten Elementen.

rbindlist zum data.frame

Das ist recht einfach und unkompliziert:


create.1
Kommentare (1)