将data.table列的每个组中的值与向量中的值进行匹配

时间:2013-10-29 20:35:58

标签: r data.table

我最近开始使用data.table包来识别符合某些条件的表列中的值。虽然我设法完成了大部分工作,但现在我遇到了这个问题:

我有一个数据表table1,其中第一列(标签)是一个组ID,第二列o.cell是一个整数。关键在于“标签”

我有另一个数据表table2,其中包含一列:“cell”。

现在,我正在尝试为table1中的每个组找到table2的“cell”列中“o.cell”列中的值。 table1有大约400K行,分为800个不等大小的组。 table2有大约1.3M行的唯一单元号。列“o.cell”table1中的单元格编号可以在多个组中找到。

这似乎是一项简单的任务,但我无法找到正确的方法。根据我构建调用的方式,它或者给我一个不同于我预期的结果,或者它永远不会完成,我必须结束R任务,因为它被冻结(我的机器有24 GB RAM)。

以下是我尝试过的调用的“变体”之一的示例:

overlap <- table1[, list(over.cell =
              o.cell[!is.na(o.cell) & o.cell %in% table2$cell]),
              by = labels]

我很确定这是使用数据表执行此任务的错误方法,最重要的是我无法得到我想要的结果。

我将非常感谢任何帮助。感谢。

1 个答案:

答案 0 :(得分:0)

这听起来像是你的设置:

dt1 = data.table(labels = c('a','b'), o.cell = 1:10)
dt2 = data.table(cell = 4:7)

你只想做一个简单的合并:

setkey(dt1, o.cell)
dt1[dt2]
#   o.cell labels
#1:      4      b
#2:      5      a
#3:      6      b
#4:      7      a