【问题标题】:Merging 2 dataframes with duplicate columns?将 2 个数据框与重复列合并?
【发布时间】:2019-11-22 11:04:26
【问题描述】:

我有一个这样的空数据框:

a <- data.frame(x = rep(NA,10))

给出以下内容:

    x
1  NA
2  NA
3  NA
4  NA
5  NA
6  NA
7  NA
8  NA
9  NA
10 NA

我有另一个这样的数据框(非连续的行号是因为这个数据框是一个更大的数据框的子集):

    x
1  NA
2  4
3  NA
5  NA
6  5
7  71
8  3

我想要做的是将 2 个数据帧合并在一起,来自 b 的值将替换 x 中的当前值以获得如下输出:

x
1  NA
2  4
3  NA
4  NA
5  NA
6  5
7  71
8  3
9  NA
10 NA

我的第一反应是使用这样的 for 循环:

for (i in rownames(b)){
    a[i,"x"] <- b[i,"x"]
}

但是,这对于大型数据帧来说效率很低。我还没有看到使用合并和 cbind/rbind 的实现。

有没有更有效的方法来做到这一点?

【问题讨论】:

    标签: r dataframe merge cbind


    【解决方案1】:
    transform(a, x = b[row.names(a),])
    #    x
    #1  NA
    #2   4
    #3  NA
    #4  NA
    #5  NA
    #6   5
    #7  71
    #8   3
    #9  NA
    #10 NA
    

    【讨论】:

      【解决方案2】:

      我们可以基于rownames合并:

      a <- data.frame(x = rep(NA,10))
      b <- data.frame(x = c(NA,4,NA,NA,5,71,3))
      
      data.frame(x=merge(a, b, by=0, suffixes = c(".a","") ,all=TRUE)[,"x"])
      #>     x
      #> 1  NA
      #> 2  NA
      #> 3   4
      #> 4  NA
      #> 5  NA
      #> 6   5
      #> 7  71
      #> 8   3
      #> 9  NA
      #> 10 NA
      

      d.b 答案是有效的答案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-01-30
        • 2017-05-02
        • 2018-11-04
        • 2017-10-31
        • 2020-10-19
        • 2021-11-04
        • 1970-01-01
        相关资源
        最近更新 更多