2016-06-01 4 views
0

Ich habe eine Liste von Datenrahmen namens db; Jeder Datenrahmen hat seinen Namen. Ich benutze:Wie benutze ich lapply, um Elemente einer Liste in verschiedene Datenrahmen zu setzen

lapply(names(db), 
     function(x)write.csv(db[x], 
          file =paste0(x,'.csv'))) 

die d.frames zu extrahieren und sie in CSV-Dateien speichern. Jetzt versuche ich, den Datenrahmen aus der Liste extact und verschiedenen Datenrahmen mit diesem Befehl erstellen:

lapply(names(db), 
     function(x)as.data.frame(db[x])) 

Aber es speichert keinen Datenrahmen in den Arbeitsbereich, wie kann ich speichere jede df mit verschiedenen Namen in der Arbeitsplatz?

Antwort

1

Wir extrahieren die list Elemente mit [[

lapply(names(db), function(x) write.csv(db[[x]], 
     file =paste0(x,'.csv'), row.names=FALSE, quote= FALSE)) 

als db[x] noch ein list von data.frame mit length 1.

ist Wenn diese große Datensätze sind, die fwrite Funktion von data.table mehr wäre effizienter

library(data.table) 
lapply(names(db), function(x) fwrite(db[[x]], file = paste0(x, ".csv"))) 

nur um das Problem zu veranschaulichen,

set.seed(24) 
db <- setNames(lapply(1:3, function(i) as.data.frame(matrix(sample(1:9, 
          5*4, replace=TRUE), ncol=4))), paste0("df", 1:3)) 

Der Unterschied zwischen dem Ansatz der OP und der [[ ist in den Ansatz der OP werden die Dateien mit Spaltennamen write, die ein Präfix aus der names von ‚db haben "Während die [[ wird kein solches Problem haben.


das zweite Problem betrifft, so dass sich mehrere Objekte im globalen Umfeld zu schaffen, wir list2env direkt auf dem ‚db‘

list2env(db, envir = .GlobalEnv) 

Aber verwenden können, ist dies nicht, wie es die meisten der empfohlenen Operationen können innerhalb der list selbst durchgeführt werden.

df1 
# V1 V2 V3 V4 
#1 3 9 6 9 
#2 3 3 4 2 
#3 7 7 7 1 
#4 5 8 7 5 
#5 6 3 3 2 
Verwandte Themen