首页 > 解决方案 > 将两个 data.table 合并到一个新的 data.table

问题描述

我有两个数据表

dt.1 <- data.table(id=c("id.1", "id.2", "id.3", "id.4", "id.5"), param = c("red", "green", "blue", "blue", "red"))
dt.2 <- data.table(red = c(0.02, 0.03, 0.04, 0.02), green=c(0.01, 0.01, 0.01, 0.02), blue=c(0.01, 0.03, 0.03, 0.01))

看起来像这样

   id param
1: id.1   red
2: id.2 green
3: id.3  blue
4: id.4  blue
5: id.5   red

   red green blue
1: 0.02  0.01 0.01
2: 0.03  0.01 0.03
3: 0.04  0.01 0.03
4: 0.02  0.02 0.01

现在我想将它们组合起来并获得这样的表格

   id.1 id.2 id.3 id.4 id.5
1: 0.02 0.01 0.01 0.01 0.02
2: 0.03 0.01 0.03 0.03 0.03
3: 0.04 0.01 0.03 0.03 0.04
4: 0.02 0.02 0.01 0.01 0.02

我怎样才能做到这一点?

标签: rdata.table

解决方案


尝试

library(data.table)
out <- merge(melt(dt.2, variable.name = "param"), # melt dt.2 before merging 
             dt.1,
             by = 'param',
             allow.cartesian = TRUE)
out <- dcast(out, rowid(id) ~ id, value.var = "value")[, id := NULL]
out
#   id.1 id.2 id.3 id.4 id.5
#1: 0.02 0.01 0.01 0.01 0.02
#2: 0.03 0.01 0.03 0.03 0.03
#3: 0.04 0.01 0.03 0.03 0.04
#4: 0.02 0.02 0.01 0.01 0.02

推荐阅读