【发布时间】:2021-08-11 23:30:14
【问题描述】:
我需要在第一列合并大量具有顺序名称(df1、df2、df3、...)的数据框。
如果我使用下面的代码(假设 3 个数据帧),它可以正常运行:
merged_df <- Reduce(function(x, y) merge(x, y, all=TRUE), list(df1, df2, df3))
但我有 100 个数据框。 如何更改代码以便不必手动编写数据框列表?
我试过这样:
df_list <- lapply(paste0("df",1:100), as.name)
merged_df <- Reduce(function(x, y) merge(x, y, all=TRUE), list(df_list))
但它不起作用......
【问题讨论】:
-
您不能只将变量名称添加为字符。
"df1"与df1不同。一个是人物,另一个是名字。您应该在阅读它们时填写数据框列表。我假设它们存储在文件或数据库中,并且您从这个源中读取它们。在阅读时,您可以将它们附加到一个列表中,而不是将每个都存储到一个新变量中。然后,您可以将它们作为df_list[[i]]访问第 i 个数据帧。或者,您可以在Reduce()调用中使用完整列表作为参数。 -
感谢@MartinWettstein 的建议,我已经以这种方式实现它并运行它:
file_names = list.files(pattern=".xlsx$")(它需要目录中的所有文件,扩展名为 .xlsx,但我把目录只包含我的数据帧 df1.xlsx、df2.xlxs 等,它会一次将它们全部附加到列表中)、df_list = lapply(file_names, read_excel, sheet=1)和merged_df <- Reduce(function(x, y) merge(x, y, all=TRUE), df_list) -
是的,这看起来像是一个干净的解决方案。