zoukankan      html  css  js  c++  java
  • 【R】行或列数目不同的两个数据框如何用rbind/cbind合并?

    前言

    通常我们用rbind和cbind合并相同行列的数据框。当两个数据框具有不同行列数目时,直接用会报错。

    > df1 <- data.frame(a = c(1:5), c = c(6:10));df1
      a  c
    1 1  6
    2 2  7
    3 3  8
    4 4  9
    5 5 10
    > df2 <- data.frame(a = c(11:15), b = c(16:20));df2
       a  b
    1 11 16
    2 12 17
    3 13 18
    4 14 19
    5 15 20
    > rbind(df1,df2)
    Error in match.names(clabs, names(xi)) : 名字同原来已有的名字不相对
    

    rbind/cbind对于行列名称一定要相同,顺序可不同,例如:

    > df1 <- data.frame(b = c(1:5), a = c(6:10));df1
      b  a
    1 1  6
    2 2  7
    3 3  8
    4 4  9
    5 5 10
    > df2 <- data.frame(a = c(11:15), b = c(16:20));df2
       a  b
    1 11 16
    2 12 17
    3 13 18
    4 14 19
    5 15 20
    > rbind(df1,df2)
        b  a
    1   1  6
    2   2  7
    3   3  8
    4   4  9
    5   5 10
    6  16 11
    7  17 12
    8  18 13
    9  19 14
    10 20 15
    

    那么怎么强行合并,即相同部分合并,不同部分用NA取代?

    方法一:dplyr的bind_rows

    > df1 <- data.frame(b = c(1:5), a = c(6:10));df1
      b  a
    1 1  6
    2 2  7
    3 3  8
    4 4  9
    5 5 10
    > df2 <- data.frame(a = c(11:15), b = c(16:20), c = LETTERS[1:5]);df2
       a  b c
    1 11 16 A
    2 12 17 B
    3 13 18 C
    4 14 19 D
    5 15 20 E
    > dplyr::bind_rows(df1, df2)
        b  a    c
    1   1  6 <NA>
    2   2  7 <NA>
    3   3  8 <NA>
    4   4  9 <NA>
    5   5 10 <NA>
    6  16 11    A
    7  17 12    B
    8  18 13    C
    9  19 14    D
    10 20 15    E
    

    方法二:plyr的rbind.fill

    > plyr::rbind.fill(df1,df2)
        b  a    c
    1   1  6 <NA>
    2   2  7 <NA>
    3   3  8 <NA>
    4   4  9 <NA>
    5   5 10 <NA>
    6  16 11    A
    7  17 12    B
    8  18 13    C
    9  19 14    D
    10 20 15    E
    

    可以看到,行列名可以不同,顺序和rbind一样,无关紧要。但最好还是相同顺序吧。

    https://stackoverflow.com/questions/3402371/combine-two-data-frames-by-rows-rbind-when-they-have-different-sets-of-columns

  • 相关阅读:
    HTTP协议详解
    如何编写出拥抱变化的代码
    Cookie ,Session
    Request 请求
    MySQL如何处理死锁
    如何优化冒泡排序
    java数据结构分析
    response响应
    Tomcat服务器
    HTTP协议
  • 原文地址:https://www.cnblogs.com/jessepeng/p/14746075.html
Copyright © 2011-2022 走看看