【问题标题】:How to bind tibbles by row with different number of columns in R [duplicate]如何在R中按行绑定具有不同列数的小标题[重复]
【发布时间】:2021-02-13 10:01:36
【问题描述】:

我想将df1df2逐行绑定,保持相同的列名,得到df3

library(tidyverse)

  df1 <- tibble(a = c(1, 2, 3),
                b = c(4, 5, 6),
                c = c(1, 5, 7))
  
  df2 <- tibble(a = c(8, 9),
                b = c(5, 6))
  
  # how to bind these tibbles by row to get
  
  df3 <- tibble(a = c(1, 2, 3, 8, 9),
                b = c(4, 5, 6, 5, 6),
                c = c(1, 5, 7, NA, NA))

由 reprex 包于 2020-10-30 创建 (v0.3.0)

【问题讨论】:

    标签: r bind


    【解决方案1】:

    使用dplyr 中的bind_rows() 试试这个。更新了 @AbdessabourMtk 的功劳:

    df3 <- dplyr::bind_rows(df1,df2)
    

    输出:

    # A tibble: 5 x 3
          a     b     c
      <dbl> <dbl> <dbl>
    1     1     4     1
    2     2     5     5
    3     3     6     7
    4     8     5    NA
    5     9     6    NA
    

    【讨论】:

    • 他要绑定df1和df2,否则这是正确答案
    • @AbdessabourMtk 非常感谢,我已经更新了你的学分!
    • 不用记我的功劳。
    • @AbdessabourMtk 任何帮助他人的贡献都需要得到认可!
    【解决方案2】:

    基本 R 选项

    df2[setdiff(names(df1),names(df2))]<-NA
    df3 <- rbind(df1,df2)
    

    给予

    > df3
    # A tibble: 5 x 3
          a     b     c
      <dbl> <dbl> <dbl>
    1     1     4     1
    2     2     5     5
    3     3     6     7
    4     8     5    NA
    5     9     6    NA
    

    【讨论】:

      【解决方案3】:

      我们可以从data.table使用rbindlist

      library(data.table)
      rbindlist(list(df1, df2), fill = TRUE)
      

      -输出

      #   a b  c
      #1: 1 4  1
      #2: 2 5  5
      #3: 3 6  7
      #4: 8 5 NA
      #5: 9 6 NA
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-03
        • 2020-11-19
        • 2020-02-18
        • 1970-01-01
        相关资源
        最近更新 更多