按列值复制data.table中的行

Mik*_*han 13 r data.table

我有一个结构如下的数据集:

data <- data.table(ID=1:10,Tenure=c(2,3,4,2,1,1,3,4,5,2),Var=rnorm(10))

    ID Tenure         Var
 1:  1      2 -0.72892371
 2:  2      3 -1.73534591
 3:  3      4  0.47007030
 4:  4      2  1.33173044
 5:  5      1 -0.07900914
 6:  6      1  0.63493316
 7:  7      3 -0.62710577
 8:  8      4 -1.69238758
 9:  9      5 -0.85709328
10: 10      2  0.10716830
Run Code Online (Sandbox Code Playgroud)

我需要复制每一行N = Tenure次.例如,我需要复制第一行2次(因为Tenure = 2.

我需要我的转换数据集如下所示:

setkey(data,ID)
print(data[,.(ID=rep(ID,Tenure))][data][, Indx := 1:.N, by=ID])

   ID Tenure        Var Indx
1:  1      2 -0.7289237    1
2:  1      2 -0.7289237    2
3:  2      3 -1.7353459    1
4:  2      3 -1.7353459    2
5:  2      3 -1.7353459    3
6:  3      4  0.4700703    1
...
...
Run Code Online (Sandbox Code Playgroud)

有没有更有效的方法(更多的data.table方式)来做到这一点?我的方式很慢.我在想应该有一种方法可以使用by-without-bymerge usng 来做到这一点.EACHI

Fra*_*ank 23

我不认为使用键/合并在这里是有帮助的.只需通过传递行索引向量进行扩展:

DT <- data[rep(1:.N,Tenure)][,Indx:=1:.N,by=ID]
Run Code Online (Sandbox Code Playgroud)