У меня есть data.frame, состоящий из идентификаторов, DateTimes и значений. Для каждого идентификатора я хочу расширить DateTimes, чтобы между минимальным и максимальным значениями было одно значение каждый час. Столбцы ID и Value должны быть заполнены соответствующими значениями (т.е. не NA). Никогда не будет случая, когда для каждого идентификатора будет несколько уникальных значений Value. Например, новый data.frame должен иметь 4 строки с ID == 1 и 5 строк с ID == 2 (всего 9 строк). Как это сделать проще всего?
Я обычно работаю с dplyr, поэтому буду принимать как базовые, так и dplyr / tidyverse методы.
library(dplyr)
library(lubridate)
dt <- Sys.time() %>% floor_date('hours')
df <- data.frame(ID = c(1, 1, 2, 2),
DateTime = c(dt, dt + hours(3), dt + hours(6), dt + hours(9)),
Value = c(3, 3, 4, 4))
ожидаемый результат:
output <- data.frame(ID = c(1, 1, 1, 1, 2, 2, 2, 2),
DateTime = c(dt, dt + hours(1), dt + hours(2), dt + hours(3),
dt + hours(6), dt + hours(7), dt + hours(8), dt + hours(9)),
Value = c(3, 3, 3, 3, 4, 4, 4, 4))
ID DateTime Value
1 1 2018-03-27 19:00:00 3
2 1 2018-03-27 20:00:00 3
3 1 2018-03-27 21:00:00 3
4 1 2018-03-27 22:00:00 3
5 2 2018-03-28 01:00:00 4
6 2 2018-03-28 02:00:00 4
7 2 2018-03-28 03:00:00 4
8 2 2018-03-28 04:00:00 4
group_by(ID, Value)
- person akrun   schedule 28.03.2018