【问题标题】:Merge multiple data frame [duplicate]合并多个数据框[重复]
【发布时间】:2018-06-05 15:05:27
【问题描述】:
df1 <- data.frame(name = c("A","B","C"), f1 = c(1,2,3), f2 = c("zz","mo","do"))
df2 <- data.frame(name = c("D","B","C"), f1 = c(1,4,6), f2 = c("ok","no","do"))
df3 <- data.frame(name = c("D","E","C"), f1 = c(1,2,3), f2 = c("so","yo","kl"))

我想将它们合并到一个数据框中,使其看起来像

name    df.1f1   df1.f2    df2.f1   df2.f2   df3.f1   df3.f2
A            1       zz        na       na       na       na     
B            2       mo         4       no       na       na      
C            3       do         6       do        3       kl
D           na       na         1       ok        1       so
E           na       na        na       na        2       yo

虽然我可以使用重复的 dplyr::full_join 来做到这一点,但它太乏味了。有人有更好的方法吗?

【问题讨论】:

  • 查看Reduce 函数,并在SO 中搜索Reducemerge 的组合。
  • 另外,它是data.frame,而不是dataframe
  • 另外,考虑来自“data.table”的rbindlist + dcast

标签: r


【解决方案1】:

如果您有多个数据框,您可以列出它们。 灵感来自vaettchen

Reduce(function(x,y) merge(x,y,by="name",all=TRUE) ,list(df1,df2,df3))

【讨论】:

    【解决方案2】:

    R 一样,有很多方法。对我来说,嵌套合并可以很好地完成这项工作:

    merge( merge( df1, df2, by = "name", all = TRUE ), df3, by = "name", all = TRUE )
    
      name f1.x f2.x f1.y f2.y f1   f2
    1    A    1   zz   NA <NA> NA <NA>
    2    B    2   mo    4   no NA <NA>
    3    C    3   do    6   do  3   kl
    4    D   NA <NA>    1   ok  1   so
    5    E   NA <NA>   NA <NA>  2   yo
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-12
      • 1970-01-01
      • 1970-01-01
      • 2021-03-08
      相关资源
      最近更新 更多