【问题标题】:R - combining two data frames with missing and out of order rowsR - 将两个数据帧与缺失和乱序行组合
【发布时间】:2017-12-12 21:07:09
【问题描述】:

我有两个数据框

merge_test_1 = t(data.frame("cats" = 1, "dogs" = 2, "horses" = 4))
merge_test_2 = t(data.frame("horses" = 1, "dogs" = 3, "rabbits" = 2))

它们看起来像这样:

       [,1]
cats      1
dogs      2
horses    4

        [,1]
horses     1
dogs       3
rabbits    2

请注意,它们并非所有行名都相同,而且它们共享的行名也有不同的顺序。我想将它们组合在一起,这样我就得到了这样的结果:

       [,1]  [,2]
cats      1     0
dogs      2     3
horses    4     1
rabbits   0     2

最终数据框中的顺序并不重要,只要它们正确组合即可。我尝试使用“合并”命令,但我无法弄清楚。

【问题讨论】:

  • 尝试将行名保存为数据框中的变量。
  • 你到底是什么意思?
  • 你需要加入一些东西(一个或多个变量)以获得你想要的输出。在这里,除了值之外,您没有任何变量。因此,您必须使用行名创建一个。 merge 命令需要 by= 选项来合并...

标签: r dataframe add


【解决方案1】:

我同意之前的 cmets 关于将行名移动到变量中的观点,但是如果您不想这样做而只使用基本 R 函数,那么下面的代码应该可以工作(尽管不匹配的单元格将是 NA而不是0)。

merge_test_1 = t(data.frame(cats = 1, dogs = 2, horses = 4))
merge_test_2 = t(data.frame(horses = 1, dogs = 3, rabbits = 2))
merge(merge_test_1, merge_test_2, by = 0, all = TRUE)
#>   Row.names V1.x V1.y
#> 1      cats    1   NA
#> 2      dogs    2    3
#> 3    horses    4    1
#> 4   rabbits   NA    2

【讨论】:

    【解决方案2】:


    library(dplyr)
    merge_test_1 = t(data.frame(cats = 1, dogs = 2, horses = 4)) %>% as.data.frame()
    merge_test_2 = t(data.frame(horses = 1, dogs = 3, rabbits = 2)) %>% as.data.frame()
    
    # change row names into actual column
    merge_test_1 <- tibble::rownames_to_column(merge_test_1)
    merge_test_2 <- tibble::rownames_to_column(merge_test_2)
    
    df <- full_join(merge_test_1, merge_test_2, by = "rowname")
    
    # change NAs to 0
    df[is.na(df)] <- 0
    
    df
    #>   rowname V1.x V1.y
    #> 1    cats    1    0
    #> 2    dogs    2    3
    #> 3  horses    4    1
    #> 4 rabbits    0    2
    

    【讨论】:

      猜你喜欢
      • 2013-06-14
      • 1970-01-01
      • 2013-12-19
      • 2019-03-29
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 2017-04-10
      • 2014-04-14
      相关资源
      最近更新 更多