【问题标题】:Duplicate row and insert before original row复制行并在原始行之前插入
【发布时间】:2018-07-09 04:51:24
【问题描述】:

我有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

【问题讨论】:

    标签: r duplicates data.table row


    【解决方案1】:

    这是一个选项,首先复制行并将与“N”的duplicated元素对应的“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]
    

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

    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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多