首页 > 解决方案 > 复制行并在原始行之前插入

问题描述

data.table看起来像这样:

try<-data.table(Time=c(5,11,12,13,15,26), N=c(1,3,1,2,1,1), 
                 Est=c(0.9956140, 0.9824561, 0.9780702, 0.9692982, 0.9649123, 0.9605263))

 Time N       Est
    5 1 0.9956140
   11 3 0.9824561
   12 1 0.9780702
   13 2 0.9692982
   15 1 0.9649123
   26 1 0.9605263

我需要复制值大于 1 的行 N 并将其插入到原始行之前。例如,输出应该是:

 Time N        Est
   5  1  0.9956140
  11  1         NA
  11  2         NA
  11  3  0.9824561
  12  1  0.9780702
  13  1         NA
  13  2  0.9692982
  15  1  0.9649123
  26  1  0.9605263

标签: rduplicatesdata.tablerow

解决方案


这是一个选项,首先复制行并将与duplicated“N”的元素相对应的“Est”的元素从最后一个位置更改为NA

try1 <- try[rep(seq_len(.N), N)][, N1 := seq_len(.N), .(Time, rleid(N))][]
i1 <- try1[, .I[duplicated(N, fromLast = TRUE)], rleid(N)]$V1
try1[i1, Est := NA]

或者join用复制的“时间”和sequence“N”做一个

try[try[, .(Time = rep(Time, N), N = sequence(N))], on = .(Time, N)]
#   Time N       Est
#1:    5 1 0.9956140
#2:   11 1        NA
#3:   11 2        NA
#4:   11 3 0.9824561
#5:   12 1 0.9780702
#6:   13 1        NA
#7:   13 2 0.9692982
#8:   15 1 0.9649123
#9:   26 1 0.9605263

推荐阅读