我有两个数据表
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
我该怎么做?
答案 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