r - 复制行并在原始行之前插入
问题描述
我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
解决方案
这是一个选项,首先复制行并将与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