【发布时间】:2021-05-15 09:37:11
【问题描述】:
我正在尝试匹配两个单独数据帧中两个向量之间的字符,我们将数据帧称为“rentals”和“parcels”,它们都包含向量“address”,它是所有出租包裹地址的字符县和城市中所有地块的地址。我们想通过搜索“parcels”中的地址向量与“rentals”中的地址匹配,找出“parcels”数据帧中的哪些地址与“rentals”数据帧中的地址匹配。
rentals$address 中的值如下所示:
rentals$address <- c("110 SW ARTHUR ST", "1610 NE 66TH AVE", "1420 SE 16TH AVE",...)
parcels$address 中的值如下所示:
parcels$address <- c("635 N MARINE DR, PORTLAND, OR, 97217", "7023 N BANK ST, PORTLAND, OR, 97203", "5410 N CECELIA ST, PORTLAND, OR, 97203",...)
“parcels”数据框中大约有 172,000 个条目,“rentals”数据框中有 285 个条目。我的第一个解决方案是使用 grepl 匹配字符值,我认为这不起作用:
matches = grepl(rentals$address, parcels$address, fixed = TRUE)
这将为 parcels$address 中的每个条目返回 FALSE,但是将“rentals”中的“address”的一些值复制并粘贴到 Excel 的 CNTRL+F 窗口中查看“parcels”数据框,我看到了一些地址。所以有些似乎匹配。
如何才能最好地找到“rentals”数据帧的“address”列中的哪个观察值是“parcels”数据帧中的匹配字符序列?
【问题讨论】:
-
试试
grepl(paste(rentals$address, collapse = '|'), parcels$address)或者另一个选项是Reduce('|', lapply(rentals$address, function(pat) grepl(pat, parcels$address))) -
发布一组更大的示例地址并显示所需的答案。由于缺乏细节而投票结束,希望您能修改问题的主体以改进它,以便我可以撤销我的结束投票。
-
看看
fuzzyjoin包。