我想在我的数据表中创建一个新列,这个列是值的向量; 但我收到以下错误:
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
Run Code Online (Sandbox Code Playgroud)
我的预期结果是:
> 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
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
语法有点麻烦,但你可以这样做:
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
Run Code Online (Sandbox Code Playgroud)
目前尚不清楚您是否需要listas 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
Run Code Online (Sandbox Code Playgroud)