我有两个大数据表DT1(2M行x 300列)和DT2(5000万行x 2列),我想根据列名将DT1列的值合并到DT2中的新列在DT2列中指定。我想实现此目标而不必融合DT1,并尽可能使用data.table操作。
Hora,样本数据集。
> require(data.table)
> DT1 <- data.table(ID = c('A', 'B', 'C', 'D'), col1 = (1:4), col2 = (5:8), col3 = (9:12), col4 = (13:16))
> DT1
ID col1 col2 col3 col4
1: A 1 5 9 13
2: B 2 6 10 14
3: C 3 7 11 15
4: D 4 8 12 16
> DT2
ID col
1: A col1
2: B col2
3: B col3
4: C col1
5: A col4
#desired output
> DT2_merge
ID col col_value
1: A col1 1
2: B col2 6
3: B col3 10
4: C col1 3
5: A col4 13
由于处理两个大的data.tables,希望找到最有效的方法。
最佳答案
使用set()
:
setkey(DT1, "ID")
setkey(DT2, "ID")
for (k in names(DT1)[-1]) {
rows <- which(DT2[["col"]] == k)
set(DT2, i = rows, j = "col_value", DT1[DT2[rows], ..k])
}
ID col col_value
1: A col1 1
2: A col4 13
3: B col2 6
4: B col3 10
5: C col1 3
注意:预先设置键可以加快过程,但可以对行进行重新排序。