基于R(字符串)中的数值矩阵进行合并

时间:2014-05-20 04:33:58

标签: string r merge

我想基于数字最佳匹配值合并两个数据帧。我正在使用levenshteinSim()来生成字符之间的数字匹配。我想使用该数字来匹配合并的观察结果。例如:

f1 <- data.frame(x = c("apple", "banana", "dark"), y = c(1,2,3))
f2 <- data.frame(x = as.character(c("ark", "appl", "bannana")), z = c(1,2,3))

mat <- sapply(as.character(f1$x), levenshteinSim, str2= as.character(f2$x))

这将生成以下矩阵,其中最高值对应于匹配:

     apple    banana      dark
[1,] 0.2000000 0.1666667 0.7500000
[2,] 0.8000000 0.1666667 0.0000000
[3,] 0.1428571 0.8571429 0.1428571

根据相应的最高匹配,然后通过x变量合并两个数据帧的任何帮助都会很棒。

2 个答案:

答案 0 :(得分:2)

您可以使用以下方式提取匹配项:

matches = names(mat)[apply(mat, 1, FUN=which.max)]

这给了[&#34;黑暗&#34;,&#34;苹果&#34;,&#34;香蕉&#34;]。这是与f2的匹配,以便合并两个数据帧try:

out = data.frame(f2x=f2$x, f1match = matches)

那是你所追求的吗?

答案 1 :(得分:1)

使用apply获取最高匹配的索引,并用重新排序的匹配替换f1的y列:

f1[,2] <- apply(mat, 2, which.max)

然后简单地将两者合并在一起

merge(f1, f2, by.x="y", by.y="z")