将两个data.tables合并到一个新的data.table

时间:2018-11-14 10:35:23

标签: r 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

我该怎么做?

2 个答案:

答案 0 :(得分:2)

尝试

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

答案 1 :(得分:1)

尝试以下代码:

dt.3<-dt.2%>%t()%>%data.frame()
cbind(dt.1,dt.3)%>%select(-param)%>%t()%>%as.data.frame()

输出:

     V1   V2   V3   V4   V5
id id.1 id.2 id.3 id.4 id.5
X1 0.02 0.01 0.01 0.02 0.01
X2 0.03 0.01 0.03 0.03 0.01
X3 0.04 0.01 0.03 0.04 0.01
X4 0.02 0.02 0.01 0.02 0.02

如果您不想作为数据帧或您希望将输出作为矩阵,请使用as.matrix