[英]Is there a more efficient algorithm to search
我试图基于两个条件在R中将两个数据集合并在一起。 它们必须具有相同的ID和年份。 一个向量的大小约为10000,另一个向量的大小为2000。我认为,如果我一个接一个地进行两个级别的搜索,计算时间将会激增。 数据按ID和年份排序。 是否有比朴素的比较有效的搜索算法?
有许多解决此问题的方法,例如通过合并,通过索引,通过循环(如您所说)。
但是,最优雅的解决方案是使用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
第2步:合并您想要的任何一种方式。
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)
希望这可以帮助!!
如果没有,请发布更多细节!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.