gpt4 book ai didi

r - 根据一个表的列名和另一个表的列值合并两个大data.tables而不熔化

转载 作者:行者123 更新时间:2023-12-04 10:32:03 24 4
gpt4 key购买 nike

我有两个大型 data.tables DT1(2M 行 x 300 列)和 DT2(50M 行 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,希望找到最有效的方法。

最佳答案

也许有一个纯 data.table 版本可以做到这一点,但一种方法是使用矩阵子集

library(data.table)

setDF(DT1)
DT2[, col_value := DT1[cbind(match(ID, DT1$ID), match(col, names(DT1)))]]

DT2
# ID col col_value
#1: A col1 1
#2: B col2 6
#3: B col3 10
#4: C col1 3
#5: A col4 13

关于r - 根据一个表的列名和另一个表的列值合并两个大data.tables而不熔化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59046032/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com