在 R 中合并多对数据帧

Merging multiple pairs of data-frame in R

我想合并多对数据框。例如,我有以下两组数据框 Con_2014、Con_2015、Con_2016 和 Income_2014、Income_2015、Income_2016。所以我想像下面这样一次合并每年的数据。

Con_Income_2014 <- merge(Income_2014,Con_2014)
Con_Income_2015 <- merge(Income_2015,Con_2015)
Con_Income_2016 <- merge(Income_2016,Con_2016)`

下面的方法我试过了,还是不行。

for (i in 1: length(years)){
  assign(paste("Con_Income", as.character(years[i]),sep =""),merge(paste("Income_",as.character(years[i]),sep=""),paste("Cons_",as.character(years[i]),sep="")))}

它运行但它只给我每对的名称。它合并字符串(文件名而不是数据)

这不是最漂亮的东西,但它确实有效:

Income_2014 = data.frame(id = 1:5, x = runif(5,-1,1))
Income_2015 = data.frame(id = 6:10, x = runif(5,-1,1))
Income_2016 = data.frame(id = 11:15, x = runif(5,-1,1))
Cons_2014 = data.frame(id = 1:5, y = runif(5,2,3))
Cons_2015 = data.frame(id = 6:10, y = runif(5,2,3))
Cons_2016 = data.frame(id = 11:15, y = runif(5,2,3))
years <- 2014:2016
for (i in 1: length(years)){
  assign(paste("Cons_Income", as.character(years[i]),sep =""),
    merge(eval(parse(text=paste("Income_",as.character(years[i]),sep=""))),                  
          eval(parse(text=paste("Cons_",as.character(years[i]),sep="")))))
}

*观察。我认为最后一个对象应该是 con_... 而不是 cons_...(打字错误)

我们不需要 for 循环。 如果所有年份都与一对数据框相关联,并且命名一致,我们可以使用 mget(ls(pattern = ....)) 创建两个数据框列表,然后使用 mapply:

进行成对合并
mapply(merge,
       mget(ls(pattern = "Income_20\d{2}")),
       mget(ls(pattern = "Con_20\d{2}")),
       SIMPLIFY = FALSE) %>%
    setNames(paste0('income_con_', 2014:2016))

@DaveArmstrong 创建的数据:

set.seed(1)

Income_2014 = data.frame(id = 1:5, x = runif(5,-1,1))
Income_2015 = data.frame(id = 6:10, x = runif(5,-1,1))
Income_2016 = data.frame(id = 11:15, x = runif(5,-1,1))
Cons_2014 = data.frame(id = 1:5, y = runif(5,2,3))
Cons_2015 = data.frame(id = 6:10, y = runif(5,2,3))
Cons_2016 = data.frame(id = 11:15, y = runif(5,2,3))

输出:

$income_con_2014
  id          x        y
1  1 -0.4689827 2.497699
2  2 -0.2557522 2.717619
3  3  0.1457067 2.991906
4  4  0.8164156 2.380035
5  5 -0.5966361 2.777445

$income_con_2015
  id          x        y
1  6  0.7967794 2.934705
2  7  0.8893505 2.212143
3  8  0.3215956 2.651674
4  9  0.2582281 2.125555
5 10 -0.8764275 2.267221

$income_con_2016
  id          x        y
1 11 -0.5880509 2.386114
2 12 -0.6468865 2.013390
3 13  0.3740457 2.382388
4 14 -0.2317926 2.869691
5 15  0.5396828 2.340349