首页 > 解决方案 > 在 R 中合并 data.frame

问题描述

我有一个关于在 R 中使用 data.frame 进行特定类型合并的问题(发现了很多类似的问题,但无法解决我的特定问题)

假设我有两个数据框,每个数据框都有两列 X1,X2:

df1 =

            X1         X2
    1  '01.01.2000'    4
    2  '01.01.2001'    5
    3  '01.01.2002'    6

df2 =

            X1         X2
    1  '01.01.2002'    8
    2  '01.01.2003'    9
    3  '01.01.2004'    10

我想要的是根据以下规则合并的数据框:

  1. 如果 in 的值X1仅 in df1,则使用 in 的X2df1
  2. 如果 in 的值X1在两者中df1,则df2使用X2from的值df2
  3. 如果 in 的值X1仅 in df2,则使用 in 的X2df2

对于df1df2以上,这将意味着:

dfMerged =

            X1         X2
    1  '01.01.2000'    4
    2  '01.01.2001'    5
    3  '01.01.2002'    8
    4  '01.01.2003'    9
    5  '01.01.2004'    10

目前,我通过先合并然后遍历所有行来使用非常慢的解决方案。还尝试了使用 dplyr::Union 等的各种方法,但找不到合适的解决方案。任何帮助是极大的赞赏!

标签: rdataframe

解决方案


您可以使用以下内容。它只是行绑定 data.frames 并且在重复的情况下(基于 X1) df1 的行将被删除。

library(dplyr)
df1 <- data.frame(X1 = c("01.01.2000", "01.01.2001", "01.01.2002"),
                  X2 = c(4, 5, 6), stringsAsFactors = F)
df2 <- data.frame(X1 = c("01.01.2002", "01.01.2003", "01.01.2004"),
                  X2 = c(8, 9, 10), stringsAsFactors = F)

dfMerged <- bind_rows(df2, df1) %>% 
  distinct(X1, .keep_all = TRUE) %>% 
  arrange(X1, X2)

推荐阅读