我试图基于两个条件在R中将两个数据集合并在一起。 它们必须具有相同的ID和年份。 一个向量的大小约为10000,另一个向量的大小为2000。我认为,如果我一个接一个地进行两个级别的搜索,计算时间将会激增。 数据按ID和年份排序。 是否有比朴素的比较有效的搜索算法?

===============>>#1 票数: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

第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)  

希望这可以帮助!!

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

  ask by Yan Song translate from so

未解决问题?本站智能推荐: