我想在我的数据表中创建一个新列,这个列是值的向量; 但我收到以下错误:
DT = data.table(x=rep(c("a","b"),c(2,3)),y=1:5) > > DT x y 1: a 1 2: a 2 3: b 3 4: b 4 5: b 5 > DT[, my_vec := rep(0,y)] Error in rep(0, y) : invalid 'times' argument
我的预期结果是:
> DT x y my_vec 1: a 1 0 2: a 2 0 0 3: b 3 0 0 0 4: b 4 0 0 0 0 5: b 5 0 0 0 0 0
有没有办法做到这一点?
语法有点麻烦,但你可以这样做:
DT[, my_vec := list(list(rep(0, y))), by = y] DT # x y my_vec #1: a 1 0 #2: a 2 0,0 #3: b 3 0,0,0 #4: b 4 0,0,0,0 #5: b 5 0,0,0,0,0
目前尚不清楚您是否需要list
as my_vec
或a vector
.如果是后者,我们按行序列分组,用'y'复制0,并将paste
每个元素组合在一起.
DT[, my_vec := paste(rep(0, y), collapse=' ') , 1:nrow(DT)] DT # x y my_vec #1: a 1 0 #2: a 2 0 0 #3: b 3 0 0 0 #4: b 4 0 0 0 0 #5: b 5 0 0 0 0 0