【发布时间】:2021-08-20 23:32:03
【问题描述】:
我有两个向量,比如
v1<-c("yellow", "red", "orange", "blue", "green")
v2<-c("blues", "redx", "grean")
我想匹配它们,即将v1 的每个元素与v2 上最相似的元素“链接”,这样结果就是
> df
v1 v2
1 yellow <NA>
2 red redx
3 orange <NA>
4 blue blues
5 green grean
下面的代码给出了预期的结果,但这只是因为它已经手动“格式化”了
df<-data.frame(v1,v2=rep(NA,5))
for (i in 1:nrow(df)) {
ag<-agrep(df[i,1], v2, ignore.case = T, value = T)
if (length(ag)==0) {df[i,2]<-NA}
else if (length(ag)==1) {df[i,2]<-ag}
else {df[i,2]<-ag[1]}
}
即使我设置了max.distance = 0.00001,agrep(df[2,1], v2, max.distance = 0.00001, ignore.case = T, value = T) 的结果也是 "redx" "grean"。
这就是为什么我有 if 条件,但它不能保证选择最相似的答案。
我该如何解决这个问题?
提前谢谢你
【问题讨论】:
-
另见
?agrep帮助页面上的“注意”。该函数不会尝试匹配整个字符串。它尝试匹配子字符串。也许您正在寻找adist()。
标签: r string-matching agrep