gpt4 book ai didi

r - 有没有更高效的搜索算法

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:45:56 25 4
gpt4 key购买 nike

我正在尝试根据两个标准在 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)

一旦数据设置好了,剩下的部分就很简单了。

第一步:设置按键。

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)  

希望这对您有所帮助!

如果没有,请发布更多详细信息!!

关于r - 有没有更高效的搜索算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23176929/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com