2016-06-01 50 views
0

我有一個名爲db的數據框列表;每個數據框都有它的名字。 我使用:如何使用lapply將列表中的元素放入不同的數據幀

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

提取d.frames並把它們保存到CSV文件中。 現在我想要從列表中extact的dataframes並用這個命令創建不同dataframes:

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

但它不會將任何數據幀存儲到工作區,我怎麼能每個DF存儲與不同的名稱爲工作區?

回答

1

我們提取list元素與[[

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

db[x]仍然是一個data.frame

如果這些大的數據集,從data.tablefwrite功能會更有效

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

只是爲了說明這個問題,

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)) 

的OP的方法和[[之間的區別是在OP的做法,將write與具有「分貝的names前綴列名的文件'而[[不會有任何這樣的問題。


關於第二個問題,那就是創造在全球環境中的多個對象,我們可以直接在「DB」

list2env(db, envir = .GlobalEnv) 

但使用list2env,這是不推薦,因爲它大部分的可以在list本身內完成操作。

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 
相關問題