Ich habe eine große Liste von data.frames, die paarweise nach Spalten und dann nach Zeilen verknüpft werden müssen, bevor sie in ein Vorhersagemodell eingegeben werden. Da keine Werte verändert werden, würde ich gerne den finalen data.frame auf die originalen data.frames in meiner Liste haben.Binden von Daten.frames zeilenweise in R ohne Erstellen von Kopien
Zum Beispiel:
library(pryr)
#individual dataframes
df1 <- data.frame(a=1:1e6+0, b=1:1e6+1)
df2 <- data.frame(a=1:1e6+2, b=1:1e6+3)
df3 <- data.frame(a=1:1e6+4, b=1:1e6+5)
#each occupy 16MB
object_size(df1) # 16 MB
object_size(df2) # 16 MB
object_size(df3) # 16 MB
object_size(df1, df2, df3) # 48 MB
#will be in a named list
dfs <- list(df1=df1, df2=df2, df3=df3)
#putting into list doesn't create a copy
object_size(df1, df2, df3, dfs) #48MB
Finale data.frame diese Orientierung haben wird (jedes einzigartiges Paar data.frames durch Spalten gebunden, dann durch Reihen gebunden Paare):
df1, df2
df1, df3
df2, df3
Ich bin dies derzeit als solches implementiert:
Wie kann ich vermeiden, meine Daten zu kopieren, aber immer noch das gleiche Ziel zu erreichen Ergebnis?
Glaubst du nicht, dass du kannst. In den ersten Manipulationen haben Sie gerade R-Objekte von einer Liste in eine andere "verschoben" (eine Spalte eines data.frames ist ein R-Objekt für sich). Der letzte Schritt beinhaltete die Erstellung neuer Objekte (die Spalten von 'combo_df'), die übrigens * die Daten zweier bestehender Objekte enthielten. Eine Kopie ist notwendig. Ein Vektor in R speichert seine Daten * zusammenhängend *; Sie können keinen Vektor erstellen, in dem ein Teil der Daten auf eine Region und ein anderer Teil auf eine andere Region zeigt. – nicola