r - R - 合并两个数据表并从旧文件中删除重复项?
问题描述
我有两个数据库 - 一个旧的和一个更新的。两者具有相同的结构,具有唯一的 ID。如果记录更改 - 有具有相同 ID 和新数据的新记录。所以在rbind(m1,m2)
我复制了记录之后。我不能只删除重复的 ID,因为可以更新数据。没有办法区分哪条记录是新的,除了它是在旧文件中还是在更新文件中。
如何合并两个表,如果存在重复 ID 的行,则保留较新文件中的一个?
我知道我可以在这两者中添加列ifelse()
,但我正在寻找更优雅的东西,最好是 oneliner。
解决方案
没有样本数据很难给出正确的答案。但这是一种可以根据数据进行调整的方法。
#sample data
library( data.table )
dt1 <- data.table( id = 2:3, value = c(2,4))
dt2 <- data.table( id = 1:2, value = c(2,6))
#dt1
# id value
# 1: 2 2
# 2: 3 4
#dt2
# id value
# 1: 1 2
# 2: 2 6
#rowbind...
DT <- rbindlist( list(dt1,dt2), use.names = TRUE )
# id value
# 1: 2 2
# 2: 3 4
# 3: 1 2
# 4: 2 6
#deselect duplicated id from the buttom up
# assuming the last file in the list contains the updated values
DT[ !duplicated(id, fromLast = TRUE), ]
# id value
# 1: 3 4
# 2: 1 2
# 3: 2 6
推荐阅读
- angular - 获取错误 ngrx Store 不是 rxjs Observable 的实例
- java - JavaFx TextArea 提示文本
- css - 如何从 MessageItem 控件中删除长描述导航
- python - KeyError 字典转换 Python
- r - 如何向前重复观察?
- matlab - MATLAB:图像快照数组
- postgresql - Google Cloud SQL Postgres,PG 10 何时可用?
- javascript - Firebase 网络文件上传代码:“app/duplicate-app”
- .net - Akka.Net Streams - 当缓冲区抛出错误时,源停止提取元素
- php - Laravel 为登录用户定义会话