我有一个数据框,包括ID、日期时间和数值。对于每个ID,我想展开DateTimes,使得在最小值和最大值之间每小时都有一个。ID和Value列应该填充它们各自的值(即不是NA)。永远不会出现每个ID有多个唯一Value值的情况。例如,新的数据框应该有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)
。 - akrun