Как заполнить фрейм данных временами между двумя временами, которые находятся в фрейме данных? - PullRequest
1 голос
/ 01 апреля 2019

Я пытаюсь заполнить свой фрейм данных датами и временем между «Start_dates» и «End_dates», которые находятся в разных столбцах фрейма данных.Я хотел бы сделать это за минуту.

Так, например, у меня есть такой фрейм данных:

data <- data.frame(id = c(1,1,1,2,3),
                   Start_dates = c("20-10-2016 00:00:00", "23-10-2016 00:00:00", "01-03-2018 00:00:00", "05-12-2018 00:00:00", "02-04-2016 00:00:00"),
                   End_dates = c("20-10-2016 00:02:00", "23-10-2016 00:01:00", "01-03-2018 00:01:00", "05-12-2018 00:02:00", "02-04-2016 00:01:00"))

Я бы хотел получить что-то вроде этого:

     data_requested <- data.frame(id = c(1,1,1,1,1,1,1,2,2,3,3,3), 
      times = c("20-10-2016 00:00:00",
      "20-10-2016 00:01:00", "20-10-2016 00:02:00", "23-10-2016 00:00:00",
     "23-10-2016 00:01:00", "01-03-2018 00:00:00", "01-03-2018 00:01:00", 
     "05-12-2018 00:00:00", "05-12-2018 00:01:00", "05-12-2018 00:02:00", 
     "02-04-2016 00:00:00", "02-04-2016 00:01:00"))

Я пробовал много вещейно это дало мне либо ошибку, либо не тот результат, который я искал.

1 Ответ

4 голосов
/ 01 апреля 2019

Мы конвертируем 'Start_dates / End_dates' в datetime и используем map2, чтобы получить последовательность

library(tidyverse)
library(lubridate)
data %>%
    # convert dates to DateTime object
    mutate_at(vars(ends_with('dates')), dmy_hms) %>%
    # get the sequence between corresponding Start/End dates 
    mutate(times =  map2(Start_dates, End_dates, seq, by = "1 min")) %>%
    # unnest to expand the list column
    unnest(times) %>% 
    # select the wanted columns
    select(id, times)
#   id               times
#1   1 2016-10-20 00:00:00
#2   1 2016-10-20 00:01:00
#3   1 2016-10-20 00:02:00
#4   1 2016-10-23 00:00:00
#5   1 2016-10-23 00:01:00
#6   1 2018-03-01 00:00:00
#7   1 2018-03-01 00:01:00
#8   2 2018-12-05 00:00:00
#9   2 2018-12-05 00:01:00
#10  2 2018-12-05 00:02:00
#11  3 2016-04-02 00:00:00
#12  3 2016-04-02 00:01:00
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...