library(tidyverse)
df <- tibble(`Action Item ID` = c("ABC", "EFG", "HIJ", "KLM", "NOP", "QRS"),
`Date Created` = as.Date(c("2019-01-01", "2019-01-01",
"2019-06-01", "2019-06-01",
"2019-08-01", "2019-08-01")),
`Date Closed` = as.Date(c("2019-01-15", "2019-05-31",
"2019-06-15", "2019-07-05",
"2019-08-15", NA)),
`Current Status` = c(rep("Closed", 5), "Open"))
#> # A tibble: 6 x 4
#> `Action Item ID` `Date Created` `Date Closed` `Current Status`
#> <chr> <date> <date> <chr>
#> 1 ABC 2019-01-01 2019-01-15 Closed
#> 2 EFG 2019-01-01 2019-05-20 Closed
#> 3 HIJ 2019-06-01 2019-06-15 Closed
#> 4 KLM 2019-06-01 2019-07-05 Closed
#> 5 NOP 2019-08-01 2019-08-15 Closed
#> 6 QRS 2019-08-01 NA Open
Я пытаюсь построить линейный график элементов открытого действия из месяца в месяц, используя фрейм данных (tibble), показанный выше. Каждый месяц будет моментальным снимком (которого больше не существует) в последний день указанного месяца. Давайте рассмотрим два элемента действий, чтобы проиллюстрировать мою проблему.
В последний день января в полночь (мой первый снимок во времени):
- Элемент действия
ABC
был закрыт,который соответствует его текущему состоянию на сегодня. - Действие Элемент
EFG
был Открыт, однако теперь он закрыт с правильным значением Current Status == "Closed"
на сегодняшний день. Но я хочу знать, что он был открыт еще 31 января, и иметь возможность подсчитывать все такие случаи. - Я также хочу видеть, что в течение следующих нескольких месяцев этот элемент действия оставался открытым и должен постоянносчитать до закрытия
Кажется, легче сказать, чем сделать. Возможно, я просто неопытный. Что такое «магический код», который я могу написать ниже, который будет:
- Обрезать все месяцы из моего фрейма данных, чтобы считать в порядке, показанном ниже.
- Заполните пропущенные месяцы,даже если их нет в моем фрейме данных, т. е.
tidyr::complete
, с соответствующими значениями (даже 0
при необходимости). - Постоянно считайте открытые элементы действия месяц за месяцем, пока они не будут закрыты
Вот результаты «Магического кода», выполненного мной вручную. Обратите внимание, что все должно быть автоматизировано, я не могу вручную менять названия месяцев месяц за месяцем. Спасибо.
df.months <- "Magic Code"
#> # A tibble: 6 x 4
#> `Month` `Action Item Qty Open at End of Month`
#> <date> <integer>
#> 2019-01-01 1
#> 2019-02-01 1
#> 2019-03-01 1
#> 2019-04-01 1
#> 2019-05-01 0
#> 2019-06-01 1
#> 2019-07-01 0
#> 2019-08-01 1