绑定data.table和vector

时间:2013-08-21 09:56:49

标签: r data-binding binding bind data.table

我有两个data.tables:

require(data.table)
set.seed(11)
dt = data.table(a=c(1,2,3,2,1,3,2,3,2,1,2,3))
V = c(1/2,1/8,3/2)
names(V) = c('1','2','3')

我想绑定这两个data.tables,以便对于dt1 $ a中的每个值,对应(=站在同一行)V的值,其名称等于dt1 $ a中的值。最后,新构造的data.table应该有ncol(dt1)+1列和nrow(dt1)行。例如:在第6行中,a 3出现在dt1 $ a中,名为3的V值应出现在新创建的data.table的第6行中。

希望这是有道理的。我希望这个操作是基本的,我很难用简单的词语来解释它!

2 个答案:

答案 0 :(得分:3)

这个怎么样?

dt[, V := V[as.character(a)]]
    a     V
 1: 1 0.500
 2: 2 0.125
 3: 3 1.500
 4: 2 0.125
 5: 1 0.500
 6: 3 1.500
 7: 2 0.125
 8: 3 1.500
 9: 2 0.125
10: 1 0.500
11: 2 0.125
12: 3 1.500

答案 1 :(得分:0)

不是最好的方式,但它有效:

V <- data.table(V)
V <- V[,a:=unique(dt[,list(a)])]
merge(dt,V,by="a")
    a     V
 1: 1 0.500
 2: 1 0.500
 3: 1 0.500
 4: 2 0.125
 5: 2 0.125
 6: 2 0.125
 7: 2 0.125
 8: 2 0.125
 9: 3 1.500
10: 3 1.500
11: 3 1.500
12: 3 1.500