【问题标题】:How to make a list of many data frames without typing their names in r?如何在不在 r 中输入名称的情况下制作许多数据框的列表?
【发布时间】:2016-03-13 17:20:02
【问题描述】:

我一直在处理数百个文件,这些文件作为单独的数据框自动加载到工作区中(假设我的工作区中有 500 个数据框)。

我想创建一个由工作区中的所有数据框/对象组成的列表,并对它们应用一个函数。当然我可以手动输入所有的对象,但是对于成百上千的数据帧来说效率不是很高。我想知道是否有任何方法可以使用 ls() 函数的输出,例如:

ls()
[1] "a"    "b"    "c"     "d"                      
[5] "e"    "f"    "g"     "h"       
[9] "i"    "j"    "k"     "l"    
[13] "m"    "n"    "o"     "p"          
...

不幸的是,当我从ls() 输出中提取时,我只得到一个字符串字符向量,而不是数据帧列表。

我会很感激你的想法。谢谢。

已编辑:以下页面 How do I make a list of data frames in r 提供了一些背景信息,但它没有回答我的问题,因为它不涵盖大量数据帧。

【问题讨论】:

  • 与其创建大量数据框对象,不如将工作目录中的所有数据集加载到列表中可能更容易。即files <- list.files(); lst <- lapply(files, read.table) 对于您目前的情况,我会使用mget(ls())
  • 我建议将eval(parse(text= ...ls() 字符向量结合使用
  • @akrun 感谢您的想法。是的,这个特定问题可能更容易,但我也希望将每个数据框作为一个单独的对象。问题是我想在所有感兴趣的数据帧上运行一组函数,其中一些也将用于进一步分析,所以我只是尝试多任务处理并考虑最有效的工作流程。
  • @SImon 您可以运行列表本身中的所有函数集,然后根据某些标准清除不需要的函数。我不会有 500 个数据框对象。如果您以后需要将列表的子集另存为单独的文件,那么在列表中会更容易。
  • @akrun 我刚刚测试了您的“mget(ls())”方法,它在数千个小型数据帧中表现出色。这次真是万分感谢!它需要一些整理,因为代码将所有对象从工作区带入列表,包括函数和值,但它完全符合我的要求。再次感谢。

标签: r list dataframe


【解决方案1】:

是的,您可以使用lsFilterclass 检索所有data.frame 的名称。例如,假设您打开一个 R 会话并输入以下内容:

> df1=data.frame(col=1:10)
> df14=data.frame(col=1:10)
> rr=3

您检索data.frame 名称:

dfnames=Filter(function(x) class(get(x))=='data.frame', ls(env=globalenv()))
#>dfnames
#[1] "df1"  "df14"

您的data.frame 列表是:

> lapply(dfnames, get)
[[1]]
   col
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9
10  10

[[2]]
   col
1    1
2    2
3    3
4    4
5    5
6    6
7    7
8    8
9    9
10  10

然后你可以用这个列表做你想做的事。

【讨论】:

  • 感谢您的解决方案。我对其进行了测试,效果也很好。
  • 我遇到了同样的问题:)
【解决方案2】:

,你好,一口气:

m1 = mtcars
m2 = mtcars
m3 = 1:10
m4 = "blabla"
df_list <- mget(ls()[sapply(ls(), function(x) is.data.frame(get(x)))])

随意分几个步骤重新排列代码

【讨论】:

    【解决方案3】:

    如果这些 data.frames 是您环境中的所有内容,您可以这样做:

    my_list=sapply(ls(),get)
    

    如果您还有其他不想合并到列表中的对象,可以使用grep() 挑选出感兴趣的数据框。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-16
      • 2021-01-08
      • 1970-01-01
      • 1970-01-01
      • 2021-09-25
      • 1970-01-01
      • 2017-08-27
      • 2020-08-05
      相关资源
      最近更新 更多