在R中的第二个数据帧中查找最接近的字符串

时间:2017-11-20 15:19:29

标签: r dataframe

我有一个非常大的data.frame,其中包含非更新名称,我希望获得存储在另一个data.frame中的正确名称。 我使用stringdist函数来查找两列之间最接近的匹配项,然后我想将新名称放在原始data.frame中。

我正在使用基于sapply函数的代码,如下例所示:

dat1 <- data.frame("name" = paste0("abc", seq(1:5)),
          "value" = round(rnorm(5), 1))


dat2 <- data.frame("name" = paste0("abd", seq(1:5)),
                   "other_info" = seq(11:15))

dat1$name2 <- sapply(dat1$name,
                        function(x){
                          char_min <- stringdist::stringdist(x, dat2$name)
                          dat2[which.min(char_min), "name"]
                        })
dat1

但是,考虑到data.frame的大小,此代码太慢了。

是否有更优化的替代解决方案,例如使用data.table R包?

1 个答案:

答案 0 :(得分:1)

首先将数据帧转换为数据表:

dat1 <- data.table(dat1)
dat2 <- data.table(dat2)

然后使用&#34;:=&#34;和&#34; amatch&#34;命令创建一个大致匹配两个名称的新列:

dat1[,name2 := dat2[stringdist::amatch(name, dat2$name)]$name]

这应该比sapply函数快得多。希望这有帮助!