【发布时间】:2020-02-03 04:54:57
【问题描述】:
假设我有以下数据框:
df <- data.frame(address=c('654 Peachtree St','890 River Rd','890 River Rd','890 River Rd','1234 Main St','1234 Main St','567 1st Ave','567 1st Ave'), city=c('Atlanta','Eugene','Eugene','Eugene','Portland','Portland','Pittsburgh','Etna'), state=c('GA','OR','OR','OR','OR','OR','PA','PA'), zip5=c('30308','97404','97404','97404','97201','97201','15223','15223'), zip9=c('30308-1929','97404-3253','97404-3253','97404-3253','97201-5717','97201-5000','15223-2105','15223-2105'), stringsAsFactors = FALSE)
`address city state zip5 zip9
1 654 Peachtree St Atlanta GA 30308 30308-1929
2 8910 River Rd Eugene OR 97404 97404-3253
3 8910 River Rd Eugene OR 97404 97404-3253
4 8910 River Rd Eugene OR 97404 97404-3253
5 1234 Main St Portland OR 97201 97201-5717
6 1234 Main St Portland OR 97201 97201-5000
7 567 1st Ave Pittsburgh PA 15223 15223-2105
8 567 1st Ave Etna PA 15223 15223-2105`
我正在考虑将任何具有匹配地址和 zip5 的行重复。
在 R 中基于这两列过滤或保留重复项非常简单。我要做的是为每组重复项创建一个带有条件标签的新列,最终得到类似于以下内容:
`address city state zip5 zip9 type
1 8910 River Rd Eugene OR 97404 97404-3253 Exact Match
2 8910 River Rd Eugene OR 97404 97404-3253 Exact Match
3 8910 River Rd Eugene OR 97404 97404-3253 Exact Match
4 1234 Main St Portland OR 97201 97201-5717 Different Zip9
5 1234 Main St Portland OR 97201 97201-5000 Different Zip9
6 567 1st Ave Pittsburgh PA 15223 15223-2105 Different City
7 567 1st Ave Etna PA 15223 15223-2105 Different City`
(我也可以为每种重复类型设置一个 True/False 列。)
我假设解决方案将在一些 mutate+ifelse+boolean 代码中,但我认为是比较 within 每个重复的子集让我陷入困境......
有什么建议吗?
编辑:
我不相信这是 Find duplicated rows (based on 2 columns) in Data Frame in R 的副本。我可以使用该解决方案为每种重复/分组匹配类型创建一个 T/F 列,但我正在尝试创建专有类别。我的条件如何也考虑到差异?完全匹配的行应该只在“完全匹配”列上显示为真,而在所有其他列上显示为假。如果我只是通过将不同的列组合提供给group_by 来定义我的列,那么完全匹配的行将永远不会返回 False。
【问题讨论】:
-
我不同意重复。正如编辑所说,这里的重点是识别存在差异的列,而不是消除重复。
-
是的,你是对的。编辑后,我也觉得不一样了。
标签: r dataframe dplyr duplicates conditional-statements