动态 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_1
、df_months_2
等
想绑定的时候就麻烦了。 This post 建议使用 do.call
绑定多个数据框。为此,我需要将我的“子集”数据帧放入列表中,然后使用 do.call
和 rbind
。这是我做不对的部分。我想我需要一个子集数据帧本身的列表。但我似乎无法创建该列表。
根据我需要的链接解决方案:
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+$")))
我正在做一系列复杂的数据操作,在这样做的过程中,我从一个“源”数据帧创建了一系列数据帧,并动态命名了我所有的“子集”数据帧。它们都具有相同的结构(列),我想将它们绑定在一起。
我面临的挑战是,在动态 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_1
、df_months_2
等
想绑定的时候就麻烦了。 This post 建议使用 do.call
绑定多个数据框。为此,我需要将我的“子集”数据帧放入列表中,然后使用 do.call
和 rbind
。这是我做不对的部分。我想我需要一个子集数据帧本身的列表。但我似乎无法创建该列表。
根据我需要的链接解决方案:
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+$")))