R 将data.table列的每组中的值与向量中的值匹配

R 将data.table列的每组中的值与向量中的值匹配,r,data.table,R,Data.table,我最近开始使用data.table包来标识表列中符合某些条件的值。虽然我和我成功地完成了大部分工作,但现在我遇到了这个问题: 我有一个数据表table1,其中第一列(标签)是组ID,第二列o.cell是整数。钥匙在“标签”上 我有另一个数据表table2,其中包含一列:“cell” 现在,我试图为表1中的每个组找到表2中“cell”列中“o.cell”列的值。表1将大约400K行分为800多个大小不等的组。表2有大约130万行独特的单元格编号。表1“o.Cell”列中的单元格编号可以在多个组中找

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

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

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

现在,我试图为表1中的每个组找到表2中“cell”列中“o.cell”列的值。表1将大约400K行分为800多个大小不等的组。表2有大约130万行独特的单元格编号。表1“o.Cell”列中的单元格编号可以在多个组中找到

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

下面是我尝试过的一个“变体”呼叫的示例:

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

overlap听起来这是您的设置:

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

大家好,欢迎来到SO。为了帮助制作一个可复制的示例,您可以使用
repearchave()
--函数是
数据。表
aware&说明如下:-您是否在(小得多的)案例上运行了一些测试来检查您的代码是否正确?很难说当您对400k行执行操作时会发生什么…在黑暗中拍摄:只需在进行分组业务之前标记列:
setkey(表1,o.cell);表1[J(表2$cell),isin2:=TRUE]
。然后您可以执行
table2[isin2,{dosomething有用的东西},by=labels]
。如果您的表很大,您可能希望避免使用
@Frank创建重复信息,您的建议正是我想要的,谢谢@里卡多萨波尔塔:谢谢你提供复制功能的链接。我从来没有听说过这件事。这是伟大的,我一定会用它在我未来的职位。