将多个数据框放入列表(智能方式)

Mar*_*ger 18 loops r list dataframe

是否有可能以一种简单的方式将大量数据框放入列表中?意思是代替必须手动编写每个名称,如下所示:

list_of_df <- list(data_frame1,data_frame2,data_frame3, ....)
Run Code Online (Sandbox Code Playgroud)

我将所有数据框都加载到我的工作空间中.我将使用列表循环所有数据帧(对每个数据帧执行相同的操作).

Aru*_*run 25

您可以使用ls()具有get如下:

l.df <- lapply(ls(), function(x) if (class(get(x)) == "data.frame") get(x))
Run Code Online (Sandbox Code Playgroud)

这将从当前环境工作区加载所有data.frames.

或者,正如@agstudy建议的那样,您可以使用模式加载data.frame您需要的s.

l.df <- lapply(ls(pattern="df[0-9]+"), function(x) get(x))
Run Code Online (Sandbox Code Playgroud)

data.frame在当前环境中加载所有s,df后跟1到任意数量的数字.

  • 用`setNames`包装`lapply`:`setNames(lapply(ls(pattern ="df [0-9] +"),function(x)get(x)),ls(pattern ="df [0- 9] +"))` (3认同)
  • 有没有办法保持对象的名称完好无损?此方法运行良好,但数据框名称不是提取的名称.有没有比单独分配更好的方法?谢谢. (2认同)

Pau*_*tra 7

到目前为止,最简单的解决方案是将data.frames放入创建它们的列表中.但是,假设您有一个对象名称的字符列表:

list_df = lapply(list_object_names, get)
Run Code Online (Sandbox Code Playgroud)

你可以在哪里构建这样的列表(10个对象的例子):

list_object_names = sprintf("data_frame%s", 1:10)
Run Code Online (Sandbox Code Playgroud)

或者将当前工作空间中的所有对象放入列表中:

list_df = lapply(ls(), get)
names(list_df) = ls()
Run Code Online (Sandbox Code Playgroud)


ags*_*udy 5

例如,您可以使用ls特定模式.例如:

一些data.frames:

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"
Run Code Online (Sandbox Code Playgroud)

  • 这会给你一个名字列表,而不是对象的内容. (6认同)