我有两个数据框-一个包含一堆邮政编码和分配给它们的调查问卷(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秒钟。
在过去的几个小时中,我尝试了很多事情,但几乎没有进展,因此任何帮助将不胜感激!
答案 0 :(得分:1)
这听起来像是内部联接,可以使用dplyr实现。然后,您可以在后面放置postcodes
列。这是一个不错的备忘单:http://stat545.com/bit001_dplyr-cheatsheet.html
inner_join(x,y):返回y中有匹配值的x中的所有行,以及x和y中的所有列。如果有多个 x和y之间的匹配项,则返回所有匹配项组合。 这是一个变异联接。