R:如何将一个新数据框合并到列表中的其他几个数据框

R: How to merge a new data frame to several other data frames in a list

我有几个单独的数据框,我想将它们分开,因为将它们合并在一起会创建一个非常大的元素。

但是,我现在想将来自另一个数据框的变量与所有变量合并。

这是我想做的一个例子:

df1 <- data.frame(ID1 = c(1:10), Var1 = rep(c(1,0),5))
df2 <- data.frame(ID1 = c(1:10), Var2 = c(21:30))

dfs <- Filter(function(x) is(x, "data.frame"), mget(ls()))

mergewith <- data.frame(ID1 = c(1:10), ID2 = c(41:50))

我的目标是 df1 和 df2 看起来像这样:

df1

   ID1 Var1 ID2
1    1    1  41
2    2    0  42
3    3    1  43
4    4    0  44
5    5    1  45
6    6    0  46
7    7    1  47
8    8    0  48
9    9    1  49
10  10    0  50

df2 

ID1 Var2 ID2
1    1   21  41
2    2   22  42
3    3   23  43
4    4   24  44
5    5   25  45
6    6   26  46
7    7   27  47
8    8   28  48
9    9   29  49
10  10   30  50

目前我尝试过的是:

dat = lapply(dfs,function(x){
  merge(names(x), mergewith, by = "ID1");x})
list2env(dat,.GlobalEnv)

但是,我收到以下消息: "'by' 必须指定唯一有效的列"

是否可以在不使用循环的情况下执行此操作?

您可以使用 lapplymerge dfs 中的所有数据帧和 mergewith。使用 list2env 获取全局环境中更改的数据帧。

list2env(lapply(dfs, function(x) merge(x, mergewith, by = 'ID1')), .GlobalEnv)

你可以试试Map

> Map(function(x, y) merge(x, y, by = "ID1"), dfs, list(mergewith))
[[1]]
   ID1 Var1 ID2
1    1    1  41
2    2    0  42
3    3    1  43
4    4    0  44
5    5    1  45
6    6    0  46
7    7    1  47
8    8    0  48
9    9    1  49
10  10    0  50

[[2]]
   ID1 Var2 ID2
1    1   21  41
2    2   22  42
3    3   23  43
4    4   24  44
5    5   25  45
6    6   26  46
7    7   27  47
8    8   28  48
9    9   29  49
10  10   30  50