我有一个包含三列的表格:姓氏、名字和地址。我希望通过搜索具有相同姓氏和相同地址的人来匹配家庭。我想出了如何使用 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
Run Code Online (Sandbox Code Playgroud)
我用来过滤它的代码是:
duplicates = duplicated(sample$Surname)
sample_surnames= sample %>% filter(duplicates)
Run Code Online (Sandbox Code Playgroud)
这是该代码的输出:
Surname First Name Address
B5 Mary X3
G4 Fred X6
G4 Anna X6
Run Code Online (Sandbox Code Playgroud)
问题有两个方面:
更新:这是我最终想要得到的表格:请注意,我不是要删除重复项,而是保留重复项。在这种情况下,Bobby、Fred 和 Anna 是唯一具有相同姓氏和地址的人。
Surname First Name Address
G4 Bobby X6
G4 Fred X6
G4 Anna X6
Run Code Online (Sandbox Code Playgroud)
我们可以使用uniquewith byoption fromdata.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
Run Code Online (Sandbox Code Playgroud)
或与 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
Run Code Online (Sandbox Code Playgroud)
基于更新的帖子,也许这有帮助
setDT(df)[, if((uniqueN(FirstName))>1) .SD,.(Surname, Address)]
# Surname Address FirstName
#1: G4 X6 Bobby
#2: G4 X6 Fred
#3: G4 X6 Anna
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5370 次 |
| 最近记录: |