2016-06-01 51 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 
相关问题