我正在进行一系列复杂的数据操作,在这样做的过程中,我从一个";源";数据帧并动态命名所有我的";子集";数据帧。它们都有相同的结构(列(,我想把它们绑定在一起。
我面临的挑战是,在动态命名/创建这些数据帧之后,我似乎无法立即获得绑定的语法。
因此,要创建我的";子集";数据帧我将所需的数据获取到一个名为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_1
、df_months_2
等。
当我想绑的时候麻烦就来了。本文建议使用do.call
绑定多个数据帧。为了做到这一点,我需要把我的";子集";数据帧,然后使用CCD_ 6和CCD_。这是我做不好的部分。我想我需要一个子集数据帧本身的列表。但我似乎无法创建该列表。
根据我需要的链接解决方案:
new_df <- do.call("rbind", list(df_months_1, df_months_2, ...)
不知道如何创建该列表,因为我正在动态创建名称。
由于我们在全局环境中创建了多个对象(不推荐(,请使用ls
和regex
作为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+$")))