如何合并两个数据帧,每个数据帧有500多列,以及200多个重叠列?

时间:2014-03-05 01:49:02

标签: r merge dataframe

我有几个数据框需要合并到一个数据框中以统治它们。主数据框最终会有数千列。所有数据框都有一个要加入的ID列。一个问题是数据帧中有数百列重复。另一个问题是少数这些列包含不一致的值。

我希望找到一种方法
  1. 合并所有数据框,如果存在重复的列名且数据框之间的值不冲突,则仅保留1个“主列”数据
  2. 如果两个数据列共享相同的名称,则保留这两个数据列,但它们的值相互冲突。
  3. 是否有任何可以帮助自动化的软件包?或者我会被困在编写大量代码/手动检查数据?

1 个答案:

答案 0 :(得分:0)

我编写了safejoin软件包,它非常简洁地解决了这个问题:

#devtools::install_github("moodymudskipper/safejoin")
library(safejoin)

请参阅以下数据帧,A两者相同,B在df1df2中不同, CD仅在一个数据帧中

df1 <- data.frame(id = 1:2, A = 3:4, B= 5:6,  C = 7:8)
df2 <- data.frame(id = 1:2, A = 3:4, B= 9:10, D = 11:12)

library(tidyverse)
safe_full_join(df1, df2, by = "id", conflict = ~ if(identical(.x, .y)) .x else 
                   map2( .x, .y,~tibble(df1=.x,df2=.y))) %>%
  unnest(.sep="_")
#   id A C  D B_df1 B_df2
# 1  1 3 7 11     5     9
# 2  2 4 8 12     6    10L