我试图基于两个条件在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

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

3回复

更有效的最短超弦搜索算法

我下面的问题是NP-complete,但是,我试图找到至少一个稍微快一点的字符串搜索功能或模块,这可能有助于减少与现在相比的一些计算时间。 任何建议,将不胜感激。 连接(尽可能长的)超弦是: AGGAGTCCGCGTGAGGGAGGTGTAGTGTAGTGG 下面的代码在16
3回复

做这种搜索算法更有效的方法?

我只是想知道是否有更好的方法来执行此算法。 我发现我需要经常执行这种类型的操作,而我目前的操作方式需要花费数小时,因为我认为它将被视为n ^ 2算法。 我将其附在下面。 我有两个包含15,000个字符串的csv文件,并且我希望比较每个列中的列,如果它们匹配,请将第二个csv的末尾连接
2回复

矢量搜索算法

我有以下问题。 说我有一个矢量: 我想从矢量中顺序采样点,其中绝对的maginute差异高于先前采样点的阈值。 所以说我的门槛是2。 我从索引1开始,然后对第一点进行采样1.然后在v [3]处满足我的条件,并且我采样3(因为3-1> = 2)。 然后3,新的采样点成为参
1回复

这种递归二进制搜索算法会更有效吗?

我已经看到了该算法的许多不同实现,但是我想知道是否有其他方法可以使搜索效率不仅仅只是使搜索二进制化。 我已经设计了该算法的特定版本,因此将立即检查数组/列表的边缘和中点以查找要搜索的键,以免在您寻找的键只是第一个中间键时避免循环搜索或最后一个元素。 例如,如果您要在1-100的列表中查
4回复

需要帮助以更有效的方式设计搜索算法

我有一个涉及生物学领域的问题。 现在我有4个非常大的文件(每个有1亿行),但结构相当简单,这些文件的每一行只有2个字段,都代表一种基因。 我的目标是:设计一个可以实现以下目标的高效算法:在这4个文件的内容中找到一个圆圈。 圆圈定义为: 我想不出一个解决这个问题的好方法,所以我现
1回复

有效的多搜索算法

发布问题的原因:我的编程经验介于业余和中等之间(但此时我很生疏)。 我可能会使用C ++,但我愿意切换到Python。 我有一些基本的排序/搜索算法的经验,如二进制,M,A *等。我听说A *可以是一个非常有效的搜索算法,但当多个搜索目标开始被期望时,有一些大的损失与其他算法相比,A *的效
1回复

如何将这种慢速的R代码重写为更有效的方法?

大家好,我正在尝试使用for循环在R代码以下进行优化,因为执行需要花费大量时间。 我什至尝试在R中使用编译器将函数转换为字节码,但性能甚至更差。 所以,有什么方法可以使用Apply函数编写此代码 在这里,我的inp_data数据框具有包含数据的单列 传递给函数时,将返回一个包
1回复

获取算法复杂度表的最有效方法

我正尝试填写R的“算法简介,第三版”(由MIT出版社出版)(第14页)中作为练习题给出的表格。 单击此链接查看表格。 //下面:感谢G. Bach的评论,添加了句子。 我应该用 假设可解决问题的算法耗时f(n)微秒,则可以在时间t内解决的问题的最大大小n。 //上方
1回复

是否有一种有效的算法来创建此类时间表? [关闭]

我正在为一个拥有数十支球队的体育联赛制定时间表。 我已经按照设置的顺序完成了所有比赛,现在我只需要为每个游戏分配一个团队作为“主队”,一个“离开”队。 该问题有两个约束: 每对球队必须互相打相同数量的主场和客场比赛。 例如,如果团队A和团队B玩4场比赛,那么A必须主持2场比赛
3回复

用于在R中自动化成对有效分组标签的算法

在努力解决这个问题一段时间后,我希望在这里得到一些建议。 我想知道是否有人知道一种基于显着性确定成对分组标签的自动方法。 这个问题与重要性测试无关(例如Tukey用于参数化或Mann-Whitney用于非参数) - 给定这些成对比较,一些boxplot类型的数字通常用子脚本表示这些分组: