【问题标题】:R: How to merge a new data frame to several other data frames in a listR:如何将新数据框合并到列表中的其他几个数据框
【发布时间】:2021-08-02 16:46:42
【问题描述】:

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

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

这是我想做的一个例子:

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' 必须指定唯一有效的列"

是否可以在不使用循环的情况下做到这一点?

【问题讨论】:

    标签: r list dataframe merge lapply


    【解决方案1】:

    你可以试试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
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 感谢您的回答!但是,当我运行您的代码时,我会收到相同的错误消息: fix.by(by.x, x) 中的错误:“by”必须指定唯一有效的列
      • @Nerd 你能在新的 R 会话中试试这个吗?这对我有用,对您共享的数据没有任何错误。
      猜你喜欢
      • 1970-01-01
      • 2019-02-06
      • 2017-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      相关资源
      最近更新 更多