我有下面的数据-时间序列数据-列为模型月年数量,我想在名为DemandInterval的数据帧中创建一个列/新变量(如下所示(,该变量使用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
解决方案。它的工作原理是过滤掉所有数量为零的行,然后找到其余行之间的间隔。然后,这被CCD_ 2返回到原始数据帧。除了数量为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