【发布时间】:2019-06-02 16:32:24
【问题描述】:
我需要对行不完全匹配但有一组逻辑标准可以确定两行是否重复的表进行重复数据删除。匹配条件示例:address 列的前 10 个字符匹配且 salePrice 列完全匹配且 closeDate 位于 8 天范围内。
使用这些标准,在此数据集中,第 2 行和第 3 行是重复的,第 10 和 11 行是重复的:
address city county houseSize lotSize salePrice closeDate pricePerFoot DOM
1 1224 Hawkhurst Place San Jose Santa Clara 2022 3724 847500 7/24/17 419 50
2 1224 Marionola Way PINOLE Contra Costa 1228 1000 390000 7/9/18 318 41
3 1224 Marionola Wy PINOLE Contra Costa 1228 1000 390000 7/3/18 318 NA
4 1224 Rockledge Ln Apt 8 WALNUT CREEK Contra Costa 1054 0 374000 6/21/18 355 6
5 1224 Singingwood Ct. Apt 3 WALNUT CREEK Contra Costa 1054 0 370000 9/26/18 351 6
6 1225 Mente Linda Loop Milpitas Santa Clara 1371 435 800000 10/23/17 584 29
7 1225 Oak Grove Avenue, Apt1 Burlingame San Mateo 1814 10425 1498000 11/19/18 826 11
8 1225 Singingwood Ct Apt 2 WALNUT CREEK Contra Costa 733 0 290000 7/12/18 341 19
9 1225 Singingwood Ct Apt 4 WALNUT CREEK Contra Costa 733 0 290000 5/30/18 396 5
10 1226 Creekside Way, Apt 5 Milpitas Santa Clara 1522 1524 1015000 11/30/17 667 2
11 1226 Creekside Way , Apt 5 Milpitas Santa Clara 1522 1524 1015000 11/30/17 667 NA
12 1226 El Camino Real , Unit 201 Burlingame San Mateo 1640 12912 1450000 10/18/18 884 12
我不知道怎么去那里。用肉眼看到重复并不难,但是对 40,000 多条记录这样做让我想找到一个更优雅的解决方案。
我在不包括公寓号码的数据集上使用了以下内容:
data <- distinct(data, tolower(substr(data$address,1,10)), salePrice, .keep_all = TRUE)
但这会遇到麻烦,因为address 的前 15 个以上字符匹配,但最后的公寓号码不同,如示例数据中的第 8 行和第 9 行。
编辑:回答deput 的请求 - 这是您需要的吗?
structure(list(address = structure(1:6, .Label = c("1224 Hawkhurst Place",
"1224 Marionola Way", "1224 Marionola Wy", "1224 Rockledge Ln Apt 8",
"1224 Singingwood Ct. Apt 3", "1225 Mente Linda Loop", "1225 Oak Grove Avenue, #1",
"1225 Singingwood Ct Apt 2", "1225 Singingwood Ct Apt 4", "1226 Creekside Way , Apt 5",
"1226 Creekside Way, #5", "1226 El Camino Real , #201", "1226 Hawkhurst Place",
"1226 Nestwood Way", "1226 Shelter Bay Ave, Mill Valley, CA 94941-3020",
"1227 Chantel Way", "1227 Culet Ranch Rd", "1227 Shelter Bay Ave, Mill Valley, CA 94941-3086"
), class = "factor"), salePrice = c(847500L, 390000L, 390000L,
374000L, 370000L, 800000L), closeDate = structure(c(13L, 15L,
14L, 11L, 17L, 3L), .Label = c("10/18/18", "10/2/18", "10/23/17",
"11/19/18", "11/30/17", "12/14/18", "12/21/17", "4/21/17", "4/23/18",
"5/30/18", "6/21/18", "7/12/18", "7/24/17", "7/3/18", "7/9/18",
"8/22/17", "9/26/18"), class = "factor")), row.names = c(NA,
6L), class = "data.frame")
【问题讨论】:
-
我会创建一个额外的 TRUE/FALSE 列来检查所有这些条件,然后根据该新列进行过滤
-
@RAB 当您必须将每一行与其他每一行进行比较时,这将如何工作?
-
您可以添加
dput的数据框吗? -
@RonakShah 如果编辑添加了您要查找的内容,请告诉我
标签: r duplicates