【问题标题】:Use R to find duplicates in multiple columns at once [duplicate]使用 R 一次在多列中查找重复项 [重复]
【发布时间】:2017-09-19 03:41:10
【问题描述】:

我有一个包含三列的表:姓氏、名字和地址。我正在寻找通过搜索具有相同姓氏和相同地址的人来匹配家庭。我想出了如何使用 Duplicated 过滤到只有同名或相同地址的人。这是我的示例表:

Surname First Name  Address
A1        Bobby       X1
B5         Joe        X2
B5        Mary        X3
F2        Lou         X4
F3        Sarah       X5
G4        Bobby       X6
G4        Fred        X6
G4        Anna        X6
H5        Eric        X7
K6        Peter       X8 

我用来过滤它的代码是:

duplicates = duplicated(sample$Surname)
sample_surnames= sample %>% filter(duplicates)

这是该代码的输出:

Surname First Name  Address         
B5        Mary        X3
G4        Fred        X6
G4        Anna        X6

问题有两个方面:

  1. 此代码删除任何重复项的第一个实例。即 Bobby、Fred 和 Anna 都应该包括在内,但 Bobby 被删除了。
  2. 有没有办法同时过滤 Surname 和 Address 列中的重复项,还是我需要执行两次操作?需要明确的是:我正在寻找两列中存在重复的实例。

更新:这是我最后想要得到的表格:请注意,我不是要删除重复项,而是保留副本。在这种情况下,Bobby、Fred 和 Anna 是唯一具有相同姓氏地址的人。

Surname First Name  Address
G4       Bobby       X6
G4        Fred       X6
G4       Anna        X6

【问题讨论】:

  • 据我所知,重复问题的链接无法回答我的问题。我已经更新了问题以澄清。

标签: r duplicates


【解决方案1】:

我们可以使用uniqueby 选项来自data.table

library(data.table)
unique(setDT(df), by = c("Surname", "Address"))
#    Surname First Name Address
#1:      A1      Bobby      X1
#2:      B5        Joe      X2
#3:      B5       Mary      X3
#4:      F2        Lou      X4
#5:      F3      Sarah      X5
#6:      G4      Bobby      X6
#7:      H5       Eric      X7
#8:      K6      Peter      X8

或者tidyverse

library(dplyr)
df %>% 
  distinct(Surname, Address, .keep_all = TRUE)
# Surname First Name Address
#1      A1      Bobby      X1
#2      B5        Joe      X2
#3      B5       Mary      X3
#4      F2        Lou      X4
#5      F3      Sarah      X5
#6      G4      Bobby      X6
#7      H5       Eric      X7
#8      K6      Peter      X8

更新

根据更新后的帖子,也许这会有所帮助

setDT(df)[, if((uniqueN(FirstName))>1) .SD,.(Surname, Address)]
#   Surname Address FirstName
#1:      G4      X6     Bobby
#2:      G4      X6      Fred
#3:      G4      X6      Anna

【讨论】:

  • 我实际上或多或少地在寻找与此相反的东西。我只想保存具有相同姓氏和相同地址的实例。我已经更新了问题以使其更清楚。谢谢。
  • @sreed 我更新了帖子。你能检查一下这是否有效吗?
  • 成功了!你真棒。谢谢!现在,要弄清楚代码的实际含义......
猜你喜欢
  • 2012-05-04
  • 2013-02-21
  • 2021-05-15
  • 1970-01-01
  • 2013-05-30
  • 2013-08-14
  • 1970-01-01
  • 2012-08-16
相关资源
最近更新 更多