如何在不在r中键入其名称的情况下制作许多数据框的列表?

时间:2015-02-04 15:06:50

标签: r list dataframe

我一直在处理几百个文件,我自动将其作为单独的数据框加载到工作区中(假设我的工作区中有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提供了一些背景信息,但它没有回答我的问题,因为它不包含大量数据帧。

3 个答案:

答案 0 :(得分:2)

是的,您可以使用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

然后你可以用这个清单做你想做的事。

答案 1 :(得分:2)

,嗨,一拍:

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

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

答案 2 :(得分:1)

如果这些data.frames都在您的环境中,您可以这样做:

my_list=sapply(ls(),get)

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