计算R中两个非零需求之间的间隔期

Calculate interval period between two non zero demands in R

我有以下数据时间序列数据 - 列 Model Month Year Quantity,我想在名为 DemandInterval 的数据框中创建一个 column/new 变量(如下所示),它计算 使用 R 代码在两个非零数量之间的需求间隔

Model       Month    Year    Quantity   DemandInterval
    Model-A     7   2017    0           0
    Model-A     8   2017    1           1
    Model-A     9   2017    1           1
    Model-A     10  2017    1           1
    Model-A     11  2017    0           0
    Model-A     12  2017    0           0
    Model-A     1   2018    0           0
    Model-A     2   2018    0           0
    Model-A     3   2018    0           0
    Model-A     4   2018    1           6
    Model-A     5   2018    5           1
    Model-A     6   2018    0           0
    Model-A     7   2018    0           0
    Model-A     8   2018    0           0
    Model-A     9   2018    1           4
    Model-A     10  2018    0           0
    Model-A     11  2018    1           2
    Model-A     12  2018    0           0
    Model-A     1   2019    1           2
    Model-A     2   2019    1           1
    Model-A     3   2019    0           0
    Model-A     4   2019    0           0
    Model-A     5   2019    2           3
    Model-A     6   2019    0           0
    Model-A     7   2019    0           0
    Model-A     8   2019    1           3
    Model-A     9   2019    1           1
    Model-A     10  2019    0           0
    Model-A     11  2019    1           2
    Model-A     12  2019    1           1
    Model-A     1   2020    0           0
    Model-A     2   2020    0           0   
    Model-A     3   2020    1           3
    Model-A     4   2020    1           1
    Model-A     5   2020    3           1
    Model-A     6   2020    1           1

如果有人能帮助我,我会很高兴。谢谢

这是一个 dplyr 解决方案。它的工作原理是过滤掉所有数量为零的行,然后找到剩余行之间的间隔。然后 left_join 返回到原始数据框。这些数字都将是正确的,除了数量为 0 的数字,它们将是 NA。这些只是更改为零 ifelse:

library(dplyr)

(df %>% left_join(
  df %>% filter(Quantity != 0) %>% 
  mutate(DemandInterval = c(1, diff(Year * 12 + Month))), by = names(df))) %>%
  mutate(DemandInterval = ifelse(is.na(DemandInterval), 0, DemandInterval))

#>      Model Month Year Quantity DemandInterval
#> 1  Model-A     7 2017        0              0
#> 2  Model-A     8 2017        1              1
#> 3  Model-A     9 2017        1              1
#> 4  Model-A    10 2017        1              1
#> 5  Model-A    11 2017        0              0
#> 6  Model-A    12 2017        0              0
#> 7  Model-A     1 2018        0              0
#> 8  Model-A     2 2018        0              0
#> 9  Model-A     3 2018        0              0
#> 10 Model-A     4 2018        1              6
#> 11 Model-A     5 2018        5              1
#> 12 Model-A     6 2018        0              0
#> 13 Model-A     7 2018        0              0
#> 14 Model-A     8 2018        0              0
#> 15 Model-A     9 2018        1              4
#> 16 Model-A    10 2018        0              0
#> 17 Model-A    11 2018        1              2
#> 18 Model-A    12 2018        0              0
#> 19 Model-A     1 2019        1              2
#> 20 Model-A     2 2019        1              1
#> 21 Model-A     3 2019        0              0
#> 22 Model-A     4 2019        0              0
#> 23 Model-A     5 2019        2              3
#> 24 Model-A     6 2019        0              0
#> 25 Model-A     7 2019        0              0
#> 26 Model-A     8 2019        1              3
#> 27 Model-A     9 2019        1              1
#> 28 Model-A    10 2019        0              0
#> 29 Model-A    11 2019        1              2
#> 30 Model-A    12 2019        1              1
#> 31 Model-A     1 2020        0              0
#> 32 Model-A     2 2020        0              0
#> 33 Model-A     3 2020        1              3
#> 34 Model-A     4 2020        1              1
#> 35 Model-A     5 2020        3              1
#> 36 Model-A     6 2020        1              1