使用模糊匹配替换dataframe列中的重复值

使用模糊匹配替换dataframe列中的重复值,r,fuzzy-search,data-cleaning,R,Fuzzy Search,Data Cleaning,我试图使用库('RecordLink')和compare.dedup()函数替换单个列中的重复值 与此类似,我有一个向量 tv3 = c("TOURDEFRANCE", 'TOURDEFRANCE', "TOURDE FRANCE", "TOURDE FRANZ", "GET FRESH") 根据权重的设定值(例如>0.8),我想要的输出如下所示: 以下是我试图获取匹配数据帧的代码: tv3 = as.data.frame(c("TOURDEFRANCE", 'TOURDEFRANCE',

我试图使用库('RecordLink')和compare.dedup()函数替换单个列中的重复值

与此类似,我有一个向量

tv3 = c("TOURDEFRANCE", 'TOURDEFRANCE', "TOURDE FRANCE", "TOURDE FRANZ", "GET FRESH") 
根据权重的设定值(例如>0.8),我想要的输出如下所示:

以下是我试图获取匹配数据帧的代码:

tv3 = as.data.frame(c("TOURDEFRANCE", 'TOURDEFRANCE', "TOURDE FRANCE", 
                  "TOURDE FRANZ", "GET FRESH"))
colnames(tv3) <- "name"
tv3 %>% compare.dedup(strcmp = TRUE) %>%
    epiWeights() %>%
    epiClassify(0.8) %>%
    getPairs(show = "links", single.rows = TRUE) -> matches
tv3=as.data.frame(c(“TOURDEFRANCE”)、“TOURDEFRANCE”、“TOURDEFRANCE”,
“TOURDE FRANZ”,“恢复活力”))
colnames(tv3)%compare.deplicate(strcmp=TRUE)%>%
epiWeights()%>%
表分类(0.8)%>%
getPairs(show=“links”,single.rows=TRUE)->匹配
然而,为了得到我所需要的,我使用了以下循环:

matches <- matches[order(matches$id1),] 
tv3new <- tv3
for (i in 1:nrow(matches)) {
  tv3new[tv3new$name==matches[i,'name.2'],] <- matches[i,'name.1']
} 
tv3new
匹配不带循环的:

tv3new <- c(as.character(matches[tv3$name %in% matches$name.2*1, 2]), 
          as.character(tv3[!tv3$name %in% matches$name.2, ]))
# If we need a data frame
data.frame(name = tv3new)
tv3new <- c(as.character(matches[tv3$name %in% matches$name.2*1, 2]), 
          as.character(tv3[!tv3$name %in% matches$name.2, ]))
# If we need a data frame
data.frame(name = tv3new)
          name
1 TOURDEFRANCE
2 TOURDEFRANCE
3 TOURDEFRANCE
4 TOURDEFRANCE
5    GET FRESH