如何使用 lapply 将列表元素放入不同的数据框中

Posted

技术标签:

【中文标题】如何使用 lapply 将列表元素放入不同的数据框中【英文标题】:How to use lapply to put elements of a list into different data frames 【发布时间】:2016-09-30 11:55:44 【问题描述】:

我有一个名为 db 的数据框列表;每个数据框都有自己的名字。 我用:

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

提取 d.frames 并将它们保存到 csv 文件中。 现在我正在尝试从列表中提取数据帧并使用此命令创建不同的数据帧:

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.framelistlength 1。

如果这些是大数据集,data.table 中的 fwrite 函数会更高效

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 列名具有前缀来自 'db' 的 names 的文件,而 [[ 将没有任何此类问题。


关于第二个问题,即在全局环境中创建多个对象,我们可以直接在'db'上使用list2env

list2env(db, envir = .GlobalEnv)

但是,不建议这样做,因为大多数操作都可以在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

【讨论】:

以上是关于如何使用 lapply 将列表元素放入不同的数据框中的主要内容,如果未能解决你的问题,请参考以下文章

如何修改多个数据框而不列出它们然后使用 lapply?

如何在数据框列表上 lapply() 公式。或如何在数据帧列表上执行 kruskal.test()

将数据框加载到列表中

如何使用lapply来计算r中列表中的唯一值

R:根据列表元素名称创建新的数据框变量

如何在 R 中使用 lapply 消除异常