我正在清理一个包含公司地址和邮政编码的公司文件。
某些公司被多次添加,但是邮政编码不同。这可能是由人为错误引起的,但是使数据集的使用非常困难。
数据集看起来像这样:
Company | Adress | Postal Code
Company1 | Limestreet | 4444ER
Company1 | Limestreet | 4445ER
Company2 | Applestreet | 3745BB
我想检查哪些公司的邮政编码不同。由于公司名称的拼写通常也不同(也是人为错误),因此最好根据匹配的地址进行检查。
我尝试用tidyverse解决,但没有用。我的计划是查找所有错误的邮政编码并手动更正。但是,如果太多,我可能必须找到一种更有效的方法。因此,我不仅想问关于如何检测错误的建议,而且我想问关于如何在R中更正错误的建议。也许可以向我介绍一些好的软件包或描述如何解决该错误的页面? >
df2 <- df1 %>%
select(Adress PostalCode) %>%
group_by(Adress) %>%
summarise( n())
创建数据集的模拟示例:
company <- c("company1", "company1", "company2", "company2", "company3")
Address <- c("Limestreet", "Limestreet", "Applestreet", "Applestreet",
"Pearstreet")
Postal_code <- c("4444ER", "4445ER", "3745BB", "3745BC", "8743IJ")
trail_data <- data.frame(company, Address, Postal_code)
答案 0 :(得分:0)
我认为您与您的代码很接近,但是我只想展示那些具有不同行的代码。这将向您显示要重点关注的内容。
trail_data %>%
select(Address, Postal_code) %>%
group_by(Address) %>%
unique() %>%
filter(n() > 1)
答案 1 :(得分:0)
我认为我们需要从您的数据库中获取更多信息才能获得最终答案,但是您可以通过编写一些代码来识别邮政编码,该代码在排序时是否存在差异。请注意,我又添加了一行数据(公司3),用作“非分散”实例。
我创建了一个名为same
的新变量,如果公司名称和地址对任意两行都匹配,则该变量等于1,否则为0。您可以将此信息与其他数据(我们没有)一起使用,以确定哪个值可能是正确的。
company <- c("company1", "company1", "company2", "company2", "company3","company3")
Address <- c("Limestreet", "Limestreet", "Applestreet", "Applestreet",
"Pearstreet","Pearstreet")
Postal_code <- c("4444ER", "4445ER", "3745BB", "3745BC", "8743IJ","8743IJ")
trail_data <- data.frame(company, Address, Postal_code)
trail_data$same<-ifelse(trail_data$company==lag(trail_data$company, trail_data$Address==lag(trail_data$Address,1) & trail_data$Postal_code!=lag(trail_data$Postal_code),0,1)