是否有更有效的搜索算法

时间:2014-04-19 23:55:19

标签: r algorithm

我试图根据两个标准将两个数据集合并在一起。他们必须拥有相同的身份和年份。其中一个向量大小约为10000,另一个大小为2000.我认为如果我逐个进行两级搜索,计算时间就会爆炸。数据按id和年份排序。是否有比天真比较更有效的搜索算法?

1 个答案:

答案 0 :(得分:3)

这个问题有很多解决方案,例如通过合并,通过索引,通过循环(如你所说)。

但是,最优雅的解决方案是使用data.table包,这对于管理数据集非常快,可以被视为data.frame的进化版本。

让我们首先设置数据:根据您在问题中提供的有限信息,这是一个解决问题的虚拟尝试。

install.packages("data.table")

library(data.table) 

set.seed(100)
dt1 <- data.table(
  id = 1:10000, 
  Year = sample(1950:2014,size=10000,replace = TRUE), 
  v1 = runif(10000)
  )
head(dt1)

dt2 <- data.table(
  id = sample(1:10000,2000), 
  Year = sample(1950:2014,size=2000,replace = TRUE), 
  v2 = runif(2000),
  v3 = runif(2000)
)
head(dt2)

设置数据后,剩下的部分非常简单。

步骤1:设置键。

setkey(dt1,id,Year)  # Set keys in first table
setkey(dt2,id,Year)  # Set keys in second table

Step2:合并你想要的任何方式。

dt1[dt2,nomatch=0]
dt2[dt1,nomatch=0]

合并数据所需的时间约为0.02秒。对于非常大的数据集,这也非常快。

system.time(dt1[dt2,nomatch=0])    # 0.02 sec
system.time(dt2[dt1,nomatch=0])    # 0.02 sec

要了解有关data.table的更多信息

?example(data.table)  

希望这会有所帮助!!

如果没有,请发布更多细节!!