首页 > 解决方案 > 子集 data.table 基于单独的 data.table

问题描述

我有一个主表

library(data.table); set.seed(42)
D1 <- data.table(id=rep(1:3,each=2), name=rep(c("a","b")), val=runif(6,0,1))
> D1
   id name       val
1:  1    a 0.9148060
2:  1    b 0.9370754
3:  2    a 0.2861395
4:  2    b 0.8304476
5:  3    a 0.6417455
6:  3    b 0.5190959

为每个 指定两个值id,namedab。我要选择的值在辅助表中确定

D2 <- data.table(id=1:3, name=c("a","a","b"))

我想D1使用D2. 我可以在循环中按 ID 执行此 ID,但考虑到我的数据维度,我希望有一个更有效的解决方案,也许使用连接。

标签: rjoindata.tablesubset

解决方案


我们可以使用连接,它会更快,因为我们已经有了data.table对象

D1[D2, on = .(id, name)]
#  id name       val
#1:  1    a 0.9148060
#2:  2    a 0.2861395
#3:  3    b 0.5190959

inner_joindplyr

library(dplyr)
inner_join(D1, D2)

match使用base R

D2$val <- D1$val[match(paste(D2$id, D2$name), paste(D1$id, D1$name))]

推荐阅读