按列值复制 data.table 中的行

标签 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

我需要复制每一行 N= Tenure次。例如我需要将第一行复制两次(从 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
...
...

是否有更有效的方法(更data.table方法)来做到这一点?我的路走得很慢。我在想应该有一种方法可以使用 by-without-by 来做到这一点合并usng .EACHI

最佳答案

我认为使用键/合并在这里没有帮助。只需通过传递行索引向量来扩展:

DT <- data[rep(1:.N,Tenure)][,Indx:=1:.N,by=ID]

关于按列值复制 data.table 中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29995920/

相关文章:

c++ - 通过从 C/C++ 替换 R 控制台中的输出来创建进度更新

r - 使用 ggplot 和 coord_polar 绘制螺旋条形图 (Condegram)

r - 将滚动函数应用于具有自定义窗口大小的 R 中的 data.table

r - 缓慢的 data.table 子集与 dplyr

r - 将列名与 R 中的列数据连接起来(使用 data.table)

r - 如何计算R中分组数据行之间距离和时间差的所有可能组合?

r - dplyr summarise_each 与 na.rm

r - 在 Windows 上使用 Caret 并行进行递归特征消除

r - 读取带有日期和时间的csv

如果在使用 data.table dplyr 时在函数中定义,则找不到 R 对象