代码之家  ›  专栏  ›  技术社区  ›  mr.T

合并两个不同大小的数据帧,不使用关键字[重复]

  •  0
  • mr.T  · 技术社区  · 2 年前

    我有两个具有不同列和不同行大小的数据帧

    library(tidyverse)
    
    tb1 <- tibble(id= 1:10,
                  a= 1:10,
                  b=11:20)
    
    tb2 <- tibble(id= 1:5,
                   q= 1:5,
                   z= 11:15)
    

    我可以很容易地把它们结合起来 id 钥匙

    full_join(tb1, tb2, by = "id")
    

    .

    # A tibble: 10 x 5
          id     a     b     q     z
       <int> <int> <int> <int> <int>
     1     1     1    11     1    11
     2     2     2    12     2    12
     3     3     3    13     3    13
     4     4     4    14     4    14
     5     5     5    15     5    15
     6     6     6    16    NA    NA
     7     7     7    17    NA    NA
     8     8     8    18    NA    NA
     9     9     9    19    NA    NA
    10    10    10    20    NA    NA
    

    如果我没有带键的列,并且不想在每个数据帧中提前创建它,我该怎么做呢。

    tb1 <- tibble(a= 1:10,
                  b=11:20)
    
    tb2 <- tibble(q= 1:5,
                  z= 11:15)
    

    有什么优雅的解决方案吗?不像这样笨重

    tb1 %>%
      mutate(row = row_number()) %>%
      left_join(
        tb2 %>% mutate(row = row_number()),
        by = "row"
      ) %>%
      select(-row)
    
    1 回复  |  直到 2 年前
        1
  •  1
  •   Edward    2 年前

    尝试 merge ,但不建议这样做。

    merge(tb1, tb2, all=TRUE, by=0) # |> subset(select=-Row.names)
    

    指定 by=0 合并在 行名称 .

       Row.names  a  b  q  z
    1          1  1 11  1 11
    2         10 10 20 NA NA
    3          2  2 12  2 12
    4          3  3 13  3 13
    5          4  4 14  4 14
    6          5  5 15  5 15
    7          6  6 16 NA NA
    8          7  7 17 NA NA
    9          8  8 18 NA NA
    10         9  9 19 NA NA