【问题标题】:I have two dataframes of unequal lengths I want to combine with specific NA placement我有两个长度不等的数据框,我想与特定的 NA 位置结合
【发布时间】:2019-11-30 01:28:05
【问题描述】:

抱歉标题不好。这是我能想到的最好的。

我有两个要合并的数据框(df1 和 df2)。 df1 与 df2 的长度不同。我不希望 df1 的信息与 df2 位于同一行。我想用 NA 填充其余的空白区域。

如果可能,我更喜欢 tidyverse 解决方案。

df1 和 df2:

df1 <- data.frame(Alpha = c(2,2),
                  Bravo = c(3,3))

df2 <- data.frame(Charlie = c(1,1,1),
                  Delta = c(2,2,2))

这是我想要的:

df3 <- data.frame(Alpha = c(2,2,NA,NA,NA),
                  Bravo = c(3,3,NA,NA,NA),
                  Charlie = c(NA, NA, 1,1,1),
                  Delta = c(NA, NA, 2,2,2))

【问题讨论】:

    标签: r


    【解决方案1】:

    dplyr:

    bind_rows(df1, df2)
    
      Alpha Bravo Charlie Delta
    1     2     3      NA    NA
    2     2     3      NA    NA
    3    NA    NA       1     2
    4    NA    NA       1     2
    5    NA    NA       1     2
    

    【讨论】:

      【解决方案2】:

      不是tidyverse 解决方案,而是基础 R 解决方案。

      一种方法是根据输入数据帧重建新的数据帧。

      final <- as.data.frame(matrix(NA, nrow = nrow(df1) + nrow(df2), 
         ncol = ncol(df1) + ncol(df2), dimnames = list(NULL, c(names(df1), names(df2)))))
      
      final[1:nrow(df1), names(df1)] <- df1
      final[(nrow(df1) + 1):nrow(final), names(df2)] <- df2
      
      final
      #  Alpha Bravo Charlie Delta
      #1     2     3      NA    NA
      #2     2     3      NA    NA
      #3    NA    NA       1     2
      #4    NA    NA       1     2
      #5    NA    NA       1     2
      

      【讨论】:

        【解决方案3】:

        我们可以从data.table使用rbindlist

        library(data.table)
        rbindlist(list(df1, df2))
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-07-28
          • 2020-12-12
          • 1970-01-01
          • 2020-05-27
          • 2022-10-25
          • 2016-08-20
          • 1970-01-01
          • 2017-05-27
          相关资源
          最近更新 更多