For循环合并df

时间:2021-04-25 14:21:37

标签: r

我希望合并多个数据框,一个叫A,另一个叫Comments_[[i]],i的范围是1到36。公共列的名字叫“Item.i .Q3",同样 i 的范围是 1 到 36。

没有循环 l 我将执行以下 36 次(将 i 更改为 1 到 36 之间的数字):

outcome <- merge(A , Comments_[[i]], by="Item.i.Q3", all= TRUE)

想知道我是否可以建立一个循环,这样我就不必做 36 次了?谢谢:)

1 个答案:

答案 0 :(得分:0)

构造名称的字符向量 df_names,并定义所需的 merge 函数 Merge。然后使用 mget 获取数据名本身并使用 Reduce 对它们进行迭代 Merge。我们假设要合并的公共列是 A 中的列号 i,并且在所有其他数据框中都是 1。

# test data
i <- 1 # position of column in A to merge on; assume 1 for others
A <- Comments_1 <- Comments_2 <- BOD

df_names <- ls(pattern = "^Comments_")
Merge <- function(x, y) merge(x, y, by = 1, all = TRUE)
Reduce(Merge, mget(df_names), cbind(A[i], A[-i]))

给予:

  Time demand.x demand.y demand
1    1      8.3      8.3    8.3
2    2     10.3     10.3   10.3
3    3     19.0     19.0   19.0
4    4     16.0     16.0   16.0
5    5     15.6     15.6   15.6
6    7     19.8     19.8   19.8