【发布时间】:2015-03-19 08:35:13
【问题描述】:
我正在使用 SAS/SQL 背景的 R,并尝试编写代码来获取两个表,比较它们,并提供差异列表。这段代码会重复用于许多不同的表集,所以我需要避免硬编码。
我正在与 Identifying specific differences between two data sets in R 合作,但它并没有让我一路走好。
示例数据,使用 LastName/FirstName(唯一)的组合作为键 --
Dataset One --
Last_Name First_Name Street_Address ZIP VisitCount
Doe John 1234 Main St 12345 20
Doe Jane 4321 Tower St 54321 10
Don Bob 771 North Ave 23232 5
Smith Mike 732 South Blvd. 77777 3
Dataset Two --
Last_Name First_Name Street_Address ZIP VisitCount
Doe John 1234 Main St 12345 20
Doe Jane 4111 Tower St 32132 17
Donn Bob 771 North Ave 11111 5
Desired Output --
LastName FirstName VarName TableOne TableTwo
Doe Jane StreetAddress 4321 Tower St 4111 Tower St
Doe Jane Zip 23232 32132
Doe Jane VisitCount 5 17
请注意,此输出会忽略我在两个表中没有相同 ID 的记录(例如,因为 Bob 的姓在一个表中是“Don”,而在另一个表中是“Donn”,所以我们完全忽略该记录)。
我已经尝试通过在两个数据集上应用 melt 函数,然后比较它们来实现这一点,但我正在使用的尺寸数据表明这不切实际。在 SAS 中,我使用 Proc Compare 进行此类工作,但在 R 中我没有找到完全等效的。
【问题讨论】:
-
您的数据大小是多少?也许这是一个有趣的信息,可以包含在您的问题中。 :)
-
您不希望 John Doe 包含在结果中吗?他的名字在两者中都重复出现。或者,如果它们不是完全相同的重复项,您只是想要差异?
-
数据量变化很大,但通常最高可达100万条左右。
-
不,John Doe 不会出现在结果中,因为该记录中没有任何不匹配。
-
我会推荐
rbind将两者放在一起,然后用duplicated删除确切的欺骗,然后根据名字和姓氏找到setdiff