当我将标志设置为1时,我想评估所有值。在以下示例中,我要进行2次评估:
我想在列out上显示“输入”的最低值的“ input2”值,在列“ rest”上显示其余的值。
这是我的输入数据
flag <- c(0, 1, 1, 0, 0, 1,1)
input<- c(1,2,3,4,5,6,7)
input2<- c("a","b","c","d","e","f","g")
library(data.table)
data.dt <- data.table(flag,input, input2)
data.dt
#> flag input input2
#> 1: 0 1 a
#> 2: 1 2 b
#> 3: 1 3 c
#> 4: 0 4 d
#> 5: 0 5 e
#> 6: 1 6 f
#> 7: 1 7 g
我想获得以下结果:
flag input input2 out rest
0 1 a - -
1 2 b a b
1 3 c a b,c
0 4 d - -
0 5 e - -
1 6 f e f
1 7 g e f,g
这是一个选择
data.dt[, grp := cumsum(c(TRUE, diff(flag) < 0))]
i1 <- data.dt[, .I[!(shift(flag, type = 'lead') == 0 & flag == 0)], .(grp)]$V1
i2 <- data.dt[, .I[flag == 0]]
i3 <- setdiff(i1, i2)
data.dt[i1, out := input2[flag == 0], .(grp)]
data.dt[i2, out := NA]
v2 <- data.dt[i1, {v1 <- input2[flag == 1];sapply(seq_along(v1),
function(i) toString(v1[seq_len(i)]))}, .(grp)]$V1
data.dt[i3, rest := v2][, grp := NULL][]
# flag input input2 out rest
#1: 0 1 a <NA> <NA>
#2: 1 2 b a b
#3: 1 3 c a b, c
#4: 0 4 d <NA> <NA>
#5: 0 5 e <NA> <NA>
#6: 1 6 f e f
#7: 1 7 g e f, g
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句