合并数据框,但根据文件选择要保留的列

时间:2019-06-27 14:10:01

标签: r join dplyr

我有两个数据框,一个原始数据框在某些列和某些值中带有注释,而一个更新的数据框具有更新后的值,但没有原始注释。我想知道是否有一种方法可以根据信息来自的文件来选择要保留的列

df1:

ID DATA1 DATA2 DATA3    DATA4   DATA5 DATA9
  1   10   10     ''      ''       X   99
  2   10   10    'error'  ''           99
  3   10   10     ''      'error'      99

df2:

ID DATA1 DATA2 DATA3    DATA4   DATA5 DATA6 DATA7
  1   13   10     ''      ''       X    
  2   15   25     ''      ''            X
  3   10   10     ''      ''               'error'

所需结果:

ID DATA1 DATA2  DATA3    DATA4     DATA5 DATA6  DATA7  DATA9
  1   13   10      ''      ''        X                   99
  2   15   25    'error'   ''              X             99
  3   10   10      ''    'error'               'error'   99

现在我已经尝试找到一个简单的解决方案(我知道这可以手动完成),因为两个文件中都有很多列,并且手动设置要保留的列可能不是最佳选择

编辑我忘了提到数据框可能并不总是具有相同的列数,我需要保留所有信息并更新新文件中更新的所有内容。预先感谢。

2 个答案:

答案 0 :(得分:0)

我们只需将第一个数据集中的列(“ DATA3”,“ DATA4”)值分配给第二个数据集

df2[4:5] <- df1[4:5]

答案 1 :(得分:0)

从您的问题来看,您似乎对更新的data.frame中应保留哪些列有所了解(如果我错了,请纠正我)。在这种情况下,使用基数R可以例如

keepCols <- c("DATA3", "DATA4")

(df <- cbind(df2[, !(names(df2) %in% keepCols)], df1[, keepCols]))
#>   ID DATA1 DATA2 DATA5 DATA6 DATA7 DATA9 DATA3 DATA4
#> 1  1    13    10     X                99            
#> 2  2    15    25           X          99 error      
#> 3  3    10    10             error    99       error

## reorder columns if necessary
df[, c("ID", sort(setdiff(names(df), "ID")))]
#>   ID DATA1 DATA2 DATA3 DATA4 DATA5 DATA6 DATA7 DATA9
#> 1  1    13    10                 X                99
#> 2  2    15    25 error                 X          99
#> 3  3    10    10       error             error    99