r-动态创建/命名一系列data.frame并将它们绑定在一起



我正在进行一系列复杂的数据操作,在这样做的过程中,我从一个";源";数据帧并动态命名所有我的";子集";数据帧。它们都有相同的结构(列(,我想把它们绑定在一起。

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

因此,要创建我的";子集";数据帧我将所需的数据获取到一个名为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等。

当我想绑的时候麻烦就来了。本文建议使用do.call绑定多个数据帧。为了做到这一点,我需要把我的";子集";数据帧,然后使用CCD_ 6和CCD_。这是我做不好的部分。我想我需要一个子集数据帧本身的列表。但我似乎无法创建该列表。

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

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

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

由于我们在全局环境中创建了多个对象(不推荐(,请使用lsregex作为pattern检查全局环境中的这些对象

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

它返回一个对象名称的vector,该名称从字符串的开头(^(到字符串的结尾($(与模式-df_months_匹配,后面跟一个或多个数字(\d+(

现在,我们get对象的值。对于>=1对象,使用mget,它返回一个键/值对作为命名的list

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

然后,我们使用do.call中的rbind来结合list的元素

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

最新更新