当前位置: 首页 > 知识库问答 >
问题:

根据条件添加值

籍利
2023-03-14

我有一个数据集

                         field_pointpath    Value    Expected
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    22098    22098 
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    22098    NA 
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    22098    NA 
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    22098    NA
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    22100    NA
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    22100    NA
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    0        NA
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    0        NA
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    0        NA
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    2        NA 
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    2        NA
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    2        NA
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    2        NA
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    2        NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    18916    18916
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    18916    NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    18916    NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    18916    NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    18917    NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    18917    NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    0        NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    0        NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    0        NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    0        NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    0        NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    0        NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    0        NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    0        NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    17434    17434
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    17441    NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    17441    NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    17446    NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    17475    NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    17488    NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    17504    NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    93       NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    126      NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    157      NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    211      NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    212      NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    212      NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    246      NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    246      NA

是否有任何方法可以确保,如果不同的field_pointpath的下一个值小于预期中的值,那么它应该在 列中执行加法。

下面是我期待的结果

    field_pointpath                         Value   Expected
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    22098   22098
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    22098   22098
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    22098   22098
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    22098   22098
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    22100   22100
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    22100   22100
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC       0    22100
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC       0    22100
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC       0    22100
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC       2    22102
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC       2    22104
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC       2    22106
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC       2    22108
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC       2    22110
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    18916   18916
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    18916   18916
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    18916   18916
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    18916   18916
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    18917   18917
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    18917   18917
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC       0    18917
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC       0    18917
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC      14    18931
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC       0    18931
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC       5    18936
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC       7    18943
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC       9    18952
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC      10    18962
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    17434   17434
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    17441   17441
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    17441   17441
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    17446   17446
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    17475   17475
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    17488   17488
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    17504   17504
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC      93    17597
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC     126    17723
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC     157    17880
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC     211    18091
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC     212    18303
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC     212    18515
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC     246    18761
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC     246    19007

所以基本上我寻求一个解决方案,对于每个唯一的< code>field_pointpath,如果它遇到一个小于前一个值的值,那么它应该将前一个值与下一个值相加。

if <代码>值[i 1]

共有2个答案

松钊
2023-03-14

代码可以做到:

dat <- read.table(header=TRUE, stringsAsFactors = FALSE, text=
'                         field_pointpath    Value    Expected
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    22098    22098 
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    22098    NA 
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    22098    NA 
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    22098    NA
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    22100    NA
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    22100    NA
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    0        NA
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    0        NA
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    0        NA
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    2        NA 
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    2        NA
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    2        NA
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    2        NA
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    2        NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    18916    18916
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    18916    NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    18916    NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    18916    NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    18917    NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    18917    NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    0        NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    0        NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    0        NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    0        NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    0        NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    0        NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    0        NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    0        NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    17434    17434
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    17441    NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    17441    NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    17446    NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    17475    NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    17488    NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    17504    NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    93       NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    126      NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    157      NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    211      NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    212      NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    212      NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    246      NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    246      NA')

my.fill <- function(d) {
  d$Expected[is.na(d$Expected)] <- -1
  d$Expected <- cummax(pmax(d$Expected, d$Value))
  ind <- which(d$Value < d$Expected)
  d$Expected[ind] <- d$Expected[ind[1]-1] + cumsum(d$Value[ind])
  d
}

L <- split(dat, dat$field_pointpath)
Lnew <- lapply(L, my.fill)
do.call(rbind, Lnew)

结果:

                                                                     field_pointpath Value Expected
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC.1  C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC 22098    22098
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC.2  C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC 22098    22098
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC.3  C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC 22098    22098
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC.4  C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC 22098    22098
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC.5  C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC 22100    22100
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC.6  C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC 22100    22100
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC.7  C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC     0    22100
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC.8  C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC     0    22100
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC.9  C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC     0    22100
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC.10 C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC     2    22102
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC.11 C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC     2    22104
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC.12 C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC     2    22106
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC.13 C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC     2    22108
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC.14 C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC     2    22110
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC.15 C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC 18916    18916
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC.16 C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC 18916    18916
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC.17 C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC 18916    18916
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC.18 C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC 18916    18916
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC.19 C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC 18917    18917
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC.20 C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC 18917    18917
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC.21 C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC     0    18917
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC.22 C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC     0    18917
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC.23 C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC     0    18917
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC.24 C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC     0    18917
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC.25 C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC     0    18917
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC.26 C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC     0    18917
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC.27 C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC     0    18917
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC.28 C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC     0    18917
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC.29 C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC 17434    17434
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC.30 C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC 17441    17441
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC.31 C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC 17441    17441
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC.32 C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC 17446    17446
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC.33 C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC 17475    17475
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC.34 C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC 17488    17488
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC.35 C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC 17504    17504
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC.36 C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    93    17597
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC.37 C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC   126    17723
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC.38 C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC   157    17880
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC.39 C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC   211    18091
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC.40 C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC   212    18303
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC.41 C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC   212    18515
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC.42 C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC   246    18761
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC.43 C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC   246    19007

以下是data.table的版本:

library("data.table")
dat <- fread(
'                         field_pointpath    Value    Expected
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    22098    22098 
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    22098    NA 
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    22098    NA 
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    22098    NA
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    22100    NA
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    22100    NA
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    0        NA
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    0        NA
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    0        NA
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    2        NA 
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    2        NA
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    2        NA
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    2        NA
C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC    2        NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    18916    18916
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    18916    NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    18916    NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    18916    NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    18917    NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    18917    NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    0        NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    0        NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    0        NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    0        NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    0        NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    0        NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    0        NA
C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    0        NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    17434    17434
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    17441    NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    17441    NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    17446    NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    17475    NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    17488    NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    17504    NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    93       NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    126      NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    157      NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    211      NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    212      NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    212      NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    246      NA
C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    246      NA')

my.fill <- function(Value, Expected) {
  Expected[is.na(Expected)] <- -1
  Expected <- cummax(pmax(Expected, Value))
  ind <- which(Value < Expected)
  Expected[ind] <- Expected[ind[1]-1] + cumsum(Value[ind])
  Expected
}

dat[, E:=my.fill(Value, Expected), by=field_pointpath]

结果:

> dat
                             field_pointpath Value Expected     E
 1: C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC 22098    22098 22098
 2: C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC 22098       NA 22098
 3: C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC 22098       NA 22098
 4: C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC 22098       NA 22098
 5: C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC 22100       NA 22100
 6: C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC 22100       NA 22100
 7: C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC     0       NA 22100
 8: C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC     0       NA 22100
 9: C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC     0       NA 22100
10: C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC     2       NA 22102
11: C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC     2       NA 22104
12: C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC     2       NA 22106
13: C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC     2       NA 22108
14: C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC     2       NA 22110
15: C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC 18916    18916 18916
16: C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC 18916       NA 18916
17: C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC 18916       NA 18916
18: C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC 18916       NA 18916
19: C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC 18917       NA 18917
20: C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC 18917       NA 18917
21: C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC     0       NA 18917
22: C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC     0       NA 18917
23: C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC     0       NA 18917
24: C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC     0       NA 18917
25: C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC     0       NA 18917
26: C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC     0       NA 18917
27: C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC     0       NA 18917
28: C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC     0       NA 18917
29: C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC 17434    17434 17434
30: C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC 17441       NA 17441
31: C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC 17441       NA 17441
32: C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC 17446       NA 17446
33: C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC 17475       NA 17475
34: C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC 17488       NA 17488
35: C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC 17504       NA 17504
36: C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    93       NA 17597
37: C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC   126       NA 17723
38: C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC   157       NA 17880
39: C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC   211       NA 18091
40: C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC   212       NA 18303
41: C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC   212       NA 18515
42: C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC   246       NA 18761
43: C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC   246       NA 19007
                             field_pointpath Value Expected     E
匡旭东
2023-03-14

使用<code>数据。表,这也可以写成一行:

library(data.table)
DT[, new := cummax(Value) + cumsum((Value < cummax(Value)) * Value), field_pointpath][]

这将返回:

                             field_pointpath Value Expected   new
 1: C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC 22098    22098 22098
 2: C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC 22098    22098 22098
 3: C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC 22098    22098 22098
 4: C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC 22098    22098 22098
 5: C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC 22100    22100 22100
 6: C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC 22100    22100 22100
 7: C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC     0    22100 22100
 8: C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC     0    22100 22100
 9: C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC     0    22100 22100
10: C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC     2    22102 22102
11: C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC     2    22104 22104
12: C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC     2    22106 22106
13: C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC     2    22108 22108
14: C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC     2    22110 22110
15: C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC 18916    18916 18916
16: C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC 18916    18916 18916
17: C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC 18916    18916 18916
18: C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC 18916    18916 18916
19: C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC 18917    18917 18917
20: C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC 18917    18917 18917
21: C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC     0    18917 18917
22: C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC     0    18917 18917
23: C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    14    18931 18931
24: C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC     0    18931 18931
25: C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC     5    18936 18936
26: C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC     7    18943 18943
27: C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC     9    18952 18952
28: C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC    10    18962 18962
29: C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC 17434    17434 17434
30: C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC 17441    17441 17441
31: C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC 17441    17441 17441
32: C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC 17446    17446 17446
33: C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC 17475    17475 17475
34: C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC 17488    17488 17488
35: C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC 17504    17504 17504
36: C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC    93    17597 17597
37: C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC   126    17723 17723
38: C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC   157    17880 17880
39: C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC   211    18091 18091
40: C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC   212    18303 18303
41: C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC   212    18515 18515
42: C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC   246    18761 18761
43: C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC   246    19007 19007
                             field_pointpath Value Expected   new

请注意,这里使用的是Q的第二个数据集,它在某些行中与第一个数据集不同(见注释)。

DT <- structure(list(field_pointpath = c("C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC", 
"C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC", "C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC", 
"C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC", "C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC", 
"C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC", "C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC", 
"C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC", "C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC", 
"C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC", "C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC", 
"C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC", "C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC", 
"C_THDxL_0154x6KSFS_A03x6KSF_11xaP_ACTACC", "C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC", 
"C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC", "C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC", 
"C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC", "C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC", 
"C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC", "C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC", 
"C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC", "C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC", 
"C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC", "C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC", 
"C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC", "C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC", 
"C_THDxL_0154x6KSFS_B03x6KSF_11xaP_ACTACC", "C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC", 
"C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC", "C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC", 
"C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC", "C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC", 
"C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC", "C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC", 
"C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC", "C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC", 
"C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC", "C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC", 
"C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC", "C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC", 
"C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC", "C_THDxL_0154x8KLFS_A06x8KLF_26xaP_ACTACC"
), Value = c(22098L, 22098L, 22098L, 22098L, 22100L, 22100L, 
0L, 0L, 0L, 2L, 2L, 2L, 2L, 2L, 18916L, 18916L, 18916L, 18916L, 
18917L, 18917L, 0L, 0L, 14L, 0L, 5L, 7L, 9L, 10L, 17434L, 17441L, 
17441L, 17446L, 17475L, 17488L, 17504L, 93L, 126L, 157L, 211L, 
212L, 212L, 246L, 246L), Expected = c(22098L, 22098L, 22098L, 
22098L, 22100L, 22100L, 22100L, 22100L, 22100L, 22102L, 22104L, 
22106L, 22108L, 22110L, 18916L, 18916L, 18916L, 18916L, 18917L, 
18917L, 18917L, 18917L, 18931L, 18931L, 18936L, 18943L, 18952L, 
18962L, 17434L, 17441L, 17441L, 17446L, 17475L, 17488L, 17504L, 
17597L, 17723L, 17880L, 18091L, 18303L, 18515L, 18761L, 19007L
)), .Names = c("field_pointpath", "Value", "Expected"), row.names = c(NA, 
-43L), class = "data.frame")
setDT(DT)
 类似资料:
  • 本文向大家介绍Android实现根据评分添加星级条,包括了Android实现根据评分添加星级条的使用技巧和注意事项,需要的朋友参考一下 简述 在仿写豆瓣的时候,发现了根据评分不同,星级数也不同的星级条。 百度一搜,发现Android有自带控件UIRatingBar,而iOS得要自己写…好吧,那就写吧。 图片素材 首先,要准备三张图片,图片如下: 空星,半星,全星 因为我们可以看到,在豆瓣的评分星级

  • 本文向大家介绍asp.net SqlParameter如何根据条件有选择的添加参数,包括了asp.net SqlParameter如何根据条件有选择的添加参数的使用技巧和注意事项,需要的朋友参考一下 SqlParameter带参数的增删改查语句,可以防止注入.有时候写sql语句的时候会根据方法传进来的参数来判断sql语句中where条件的参数. 一般方法 DAL层方法 现在想根据集合UserInf

  • 我试图弄清楚如何根据java系统属性是否为given/set向记录器添加一个appender。 假设我有这样一个基本配置: 例如,我知道我可以在给定属性(“loglevel”)上使级别动态化(如果没有给定属性,则默认为“info”): 我看了筛选器的文档,我想不出来。当然,如果过滤器是正确的方法的话。

  • 问题内容: 您能告诉我一种禁用提交按钮的方法吗,该按钮通过以下方式变为新状态: 仅当表单有效时,才应启用该按钮。 与不起作用: app.js中的canSave函数为: 问题答案: 您可以简单地将其与之配对,这样便可以使用。 这是使用自定义指令的更理想的方式:

  • 我有以下数据帧: 我希望获得行ID,其中。 预期收益为。 有什么想法吗?