将多个数据框放入列表(智能方式)[重复]
Posted
技术标签:
【中文标题】将多个数据框放入列表(智能方式)[重复]【英文标题】:Put multiple data frames into list (smart way) [duplicate] 【发布时间】:2013-02-03 22:50:43 【问题描述】:是否可以通过某种简单的方式将大量数据框放入列表中? 意思是不必像下面这样手动编写每个名称:
list_of_df <- list(data_frame1,data_frame2,data_frame3, ....)
我已将所有数据框加载到我的工作空间中。 我将使用列表循环遍历所有数据帧(对每个数据帧执行相同的操作)。
【问题讨论】:
@Imo 和@EdChum;此问题发布在您将其标记为重复的问题之前。请看日期! 这个重复的标签似乎有问题。另一个问题似乎是针对声明数据框列表的。这个问题似乎指向将已声明的数据帧放入列表中。这是一个细微的差别;但是,这些任务略有不同。 【参考方案1】:您可以将ls()
与get
一起使用,如下所示:
l.df <- lapply(ls(), function(x) if (class(get(x)) == "data.frame") get(x))
这将从您当前的环境工作区加载所有 data.frames。
或者,正如@agstudy 建议的那样,您可以使用模式仅加载您需要的data.frame
s。
l.df <- lapply(ls(pattern="df[0-9]+"), function(x) get(x))
加载当前环境中所有以df
开头的data.frame
s,后跟1 到任意数量的数字。
【讨论】:
有没有办法让包含的对象的名称保持不变?此方法效果很好,但数据框名称不是提取的名称。有没有比单独分配更好的方法?谢谢。 @Anusha,对不起,我不太明白你的意思。您是说您想要一个 data.frames 列表,列表中每个元素的名称都是这些 data.frames 的名称吗? 是的。这些对象已通过其名称进行标识,但未包含在列表中。我更愿意指定在此步骤中选择的数据框的名称。 请让我知道这是否需要发布一个单独的问题。我在评论中提出了问题,因为似乎解决方案可能是对这里的代码进行一些修改。 只需将lapply
与setNames
包装起来:setNames(lapply(ls(pattern="df[0-9]+"), function(x) get(x)), ls(pattern="df[0-9]+"))
【参考方案2】:
到目前为止,最简单的解决方案是将data.frame
放入您创建它们的列表中。但是,假设您有一个对象名称的字符列表:
list_df = lapply(list_object_names, get)
您可以在哪里构建这样的列表(例如 10 个对象):
list_object_names = sprintf("data_frame%s", 1:10)
或将当前工作区中的所有对象放入一个列表中:
list_df = lapply(ls(), get)
names(list_df) = ls()
【讨论】:
【参考方案3】:例如,您可以将ls
与特定模式一起使用。例如:
一些数据帧:
data.frame1 <- data.frame()
data.frame2 <- data.frame()
data.frame3 <- data.frame()
data.frame4 <- data.frame()
list(ls(pattern='data.fra*'))
[[1]]
[1] "data.frame1" "data.frame2" "data.frame3" "data.frame4"
【讨论】:
这会给你一个名称列表,而不是对象的内容。以上是关于将多个数据框放入列表(智能方式)[重复]的主要内容,如果未能解决你的问题,请参考以下文章