[英]Detect differences between two lists of data.frames
背景/基本问题:
我有一个来自生产数据库的数据提取作业,该数据提取作业生成一个数据集,用作进一步分析工作的参考。 在每个数据集构建之间,我希望能够检测数据集中是否发生了任何更改。 数据集存储为数据框列表。
题:
以下代码是我的数据集的简化版本
account_1 <- data.frame(id = c(1,2), name=c("Andy", "Ben"))
account_2 <- data.frame(id = c(1,2,3), name=c("Andy", "Ben2","Ceasar"))
bill <- data.frame(id=c(101,102,103), account_id = c(1,2,3), amount=c(100,100,100))
db_1 = list(account=account_1, bill=bill)
db_2 = list(account=account_2, bill=bill)
我希望能够检测到帐户数据框中的db_1和db_2之间的差异。 伪代码:
delta(db_1, db_2)
应该回来
account
id name
2 Ben2
3 Ceasar
bill
<<NULL>>
响应是由人而不是机器读取的,因此对响应没有严格的正式要求。
其他要考虑的项目:
编辑:数据框比较可以通过
但是循环遍历数据列表的最佳方法是什么
基本函数mapply()
可以让您遍历多个对象(列表或向量):
mapply(function(x, y) dplyr::anti_join(x, y),
db_2, db_1) # order matters for the result, since it returns rows in x that don't have a match in y
$account
id name
1 2 Ben2
2 3 Ceasar
$bill
[1] id account_id amount
<0 rows> (or 0-length row.names)
如果要使用tidyverse函数,请使用purrr::map2()
:
purrr::map2(db_2, db_1, ~ anti_join(.x, .y))
如果要比较两个以上的列表,则还有pmap()
函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.