Как создать последовательность дат между двумя датами в одном столбце в R - PullRequest
0 голосов
/ 25 мая 2018

Я изо всех сил пытаюсь создать последовательность дат между двумя датами в одном столбце, используя скрипт R.

У меня есть идентификатор запроса и идентификатор последовательности, Дата и статус. Таблица ввода

Мое требование - создать такую ​​таблицу. Таблица желаемых результатов

Любая помощь в этом отношении будет принята с благодарностью.

Спасибо

Ответы [ 2 ]

0 голосов
/ 31 мая 2018

Спасибо, Ясбнер!Я установил пакеты dplyr и tidyr, как было предложено.Я использую 'mutate', чтобы исправить формат даты.

Мой CSV-файл (file.csv) содержит эти строки данных

Статус созданного ReqID Seq

100 1 01.01.2008 Запланировано

100 201.10.2008 Выполнение

100 3 15.01.2017 Задержка

100 4 18.01.2017 Завершено

101 1 01.10.2008 Запланировано

101 2 18/01/2018 Выполнение

101 3 20/01/2018 Завершено

102 1 18/01/2018 Запланировано

102 2 22 /01/2018 Выполнение

102 3 25/01/2018 Отменено

103 1 01/02/2018 Запланировано


# мой окончательный сценарий r

mydata <-read.csv ('file.csv') # Чтение данных из csv </p>

myindf <-as.data.frame (mydata) # преобразование их во фрейм данных </p>

myoutdf<- myindf%>% mutate (Создано = dmy (Создано))%>% group_by (ReqID)%>% выполнено (Создано = seq.Date (min (Создано), max (Создано), by = "day"))%>% fill (ReqID, Seq, Status)

print (myoutdf, n = 38) # распечатать все 38 строк

0 голосов
/ 25 мая 2018

Вы можете сделать это с помощью библиотек tidyverse.Сначала установите в столбце даты даты dmy в пакете lubridate.Затем вы можете использовать tidyr функции complete и fill, чтобы расширить данные, как показано на рисунке.complete имеет возможность заполнить пробелы по дням.group_by ReqID, чтобы сделать это для каждого из ваших индивидуальных идентификаторов.

library(tidyverse)
library(lubridate)
df <- data_frame(ReqID = 100, ID_Seq = 1:3, Created = dmy("01/01/2018","10/01/2018","18/01/2018"), Status = c("Scheduled","In Execution", "Completed"))
df %>%
  group_by(ReqID) %>% 
  complete(Created = seq.Date(min(Created),max(Created), by = "day")) %>%
  fill(ReqID,ID_Seq,Status)

## A tibble: 18 x 4
#   Created    ReqID ID_Seq Status      
#   <date>     <dbl>  <int> <chr>       
# 1 2018-01-01   100      1 Scheduled   
# 2 2018-01-02   100      1 Scheduled   
# 3 2018-01-03   100      1 Scheduled   
# 4 2018-01-04   100      1 Scheduled   
# 5 2018-01-05   100      1 Scheduled   
# 6 2018-01-06   100      1 Scheduled   
# 7 2018-01-07   100      1 Scheduled   
# 8 2018-01-08   100      1 Scheduled   
# 9 2018-01-09   100      1 Scheduled   
#10 2018-01-10   100      2 In Execution
#11 2018-01-11   100      2 In Execution
#12 2018-01-12   100      2 In Execution
#13 2018-01-13   100      2 In Execution
#14 2018-01-14   100      2 In Execution
#15 2018-01-15   100      2 In Execution
#16 2018-01-16   100      2 In Execution
#17 2018-01-17   100      2 In Execution
#18 2018-01-18   100      3 Completed  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...