R:加快循环速度

时间:2019-05-23 11:15:40

标签: r performance for-loop which

我有两个数据框-一个包含一堆邮政编码和分配给它们的调查问卷(df1),另一个包含所有可能的邮政编码和包含这些邮政编码的区域(df2)。我本质上需要删除邮政编码,然后将每个调查分配到一个区域(使用邮政编码进行交叉引用)。目前,我估计我的程序将花费5个小时。我该如何加快速度?

for (i in 1:nrows(df1)) {
    index <- which(df2$postcodes == toString(df1$postcodes[i])
    if (length(index)) {
        df1$zone <- toString(df2[index])
    } else {
        df1$zone <- 'UNMATCHED'
    }
} 

目前,我发现运行100条邮政编码大约需要6秒钟。

在过去的几个小时中,我尝试了很多事情,但几乎没有进展,因此任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

这听起来像是内部联接,可以使用dplyr实现。然后,您可以在后面放置postcodes列。这是一个不错的备忘单:http://stat545.com/bit001_dplyr-cheatsheet.html

  

inner_join(x,y):返回y中有匹配值的x中的所有行,以及x和y中的所有列。如果有多个   x和y之间的匹配项,则返回所有匹配项组合。   这是一个变异联接。