动态 create/name 一系列 data.frames 并将它们绑定在一起

Dynamically create/name a series of data.frames and bind them together

我正在做一系列复杂的数据操作,在这样做的过程中,我从一个“源”数据帧创建了一系列数据帧,并动态命名了我所有的“子集”数据帧。它们都具有相同的结构(列),我想将它们绑定在一起。

我面临的挑战是,在动态 name/create 这些数据帧之后,我似乎无法立即获得绑定语法。

因此,为了创建我的“子集”数据框,我将所需数据放入名为 df_master 的数据框中,并使用 assign 命名它。我在 for 循环内执行此操作,因此我最终得到 10 个子集数据帧。伪代码如下所示:

for (i in 1:10){

    .... do some stuff ...

    master_df <- save into a df

    assign(paste0("df_months_", i), df_master)  # dynamically (re) name df_master

    }

这很好用,我得到了我的 10 个数据帧名称 df_months_1df_months_2

想绑定的时候就麻烦了。 This post 建议使用 do.call 绑定多个数据框。为此,我需要将我的“子集”数据帧放入列表中,然后使用 do.callrbind。这是我做不对的部分。我想我需要一个子集数据帧本身的列表。但我似乎无法创建该列表。

根据我需要的链接解决方案:

new_df <- do.call("rbind", list(df_months_1, df_months_2, ...)

不确定如何创建该列表,因为我正在动态创建名称。

因为我们在全局环境中创建了多个对象(不推荐),请使用 ls 检查全局环境中的这些对象,并使用 regex 作为 pattern

ls(pattern = "^df_months_\d+$")

它 returns 对象名称的 vector 与模式匹配 - df_months_ 从字符串的开头 (^) 后跟一个或多个数字 ( \d+) 直到字符串的末尾 ($)

现在,我们 get 对象的值。对于 >=1 对象,使用 mget 其中 returns 一对 key/value 作为命名的 list.

mget(ls(pattern = "^df_months_\d+$"))

然后,我们在do.call中使用rbind来绑定list

的元素
do.call(rbind, mget(ls(pattern = "^df_months_\d+$")))