是的,以前有人问过这个问题,但我找不到一个线程可以为这个问题提供简单、干净的答案。
我有下面的示例数据 - 我有两列,col1 是当前地址,col2 是我被告知比当前地址“更好”的地址。我需要看看第二列比第一列“好”多少。大多数时候,第二个更好,因为它包含第一个缺少的次要信息,例如公寓号码。
test <- as.data.frame(matrix(c(
"742 Evergreen Terrace" , "742 Evergreen Terrace Apt 3" ,
"31 Spooner Street #42" , "31 Spooner Street",
"129 W 81st Street" , "129 W 81st Street Apt 5A" ,
"245 E 73rd Street", "245 E 73rd Street Apt 6") , ncol=2, byrow=TRUE,
dimnames=list(NULL, c("old_addr" , "new_addr"))) ,stringsAsFactors=FALSE)
我在这里找到了一个接近我想要的答案:模糊匹配一列中的行与下一列中的相同行
我需要创建第三列,它是一个简单的 1/0 变量,如果近似匹配则为 == 1,否则为 0。我需要能够指定近似匹配的阈值。
对于我的第一个示例 - 742 Evergreen Terrace 与 742 Evergreen Terrace Apt 3,长度相差 6。我需要能够指定六、八或其他的长度差。
我查看了 agrep,但我需要比较同一行中的两列数据,但它不允许这样做。我也尝试过 lapply,但它的结果让我认为它正在循环遍历整个列中的所有数据,并且我需要逐行比较。另外,最大距离我不明白,下面的 ifelse 和最大值为 1(如果我正确理解为 1 == 可以有一个编辑或更改单位),它应该抛出错误,但它只在一个中出现案件。
agrep(test$old_addr, test$new_addr, max.distance = 0.1, ignore.case = TRUE)
test$fuzz_match <- lapply(test$old_addr , agrep , x =
test$new_addr , max.distance = 1 , ignore.case = TRUE)
任何帮助表示感谢,谢谢!