如何从不规则面板时间序列数据生成规则面板

How to generate a regular panel from an irregular panel time series data

我想从不规则的面板数据结构转到规则的面板数据结构,但我正在纠结如何去做。欢迎任何建议!

当前不规则面板数据结构:

trackingid <- as.character(c(1470149111625446735))
timestamp <- as.character(c("2018-06-17", "2018-06-18", "2018-06-19", "2018-06-21", "2018-06-22", "2018-06-23"))
pageimp <- as.numeric(c(8, 1, 3, 4, 2, 3))
dt <- data.frame(trackingid,timestamp, pageimp)

A​​spired 常规面板数据结构:

trackingid <- as.character(c(1470149111625446735))
timestamp <- as.character(c("2018-06-17", "2018-06-18", "2018-06-19", "2018-06-20", "2018-06-21", "2018-06-22", "2018-06-23"))
pageimp <- as.numeric(c(8, 1, 3, 0, 4, 2, 3))
dt <- data.frame(trackingid,timestamp, pageimp)

请注意,在我的完整数据中,我将拥有更多具有不同不规则时间戳的 trackingid。到目前为止,所有先前的解决方案都只讨论了从不规则时间序列到规则时间序列的移动,而没有考虑我的数据的面板性质。

可以做到:

library(tidyverse)

dt %>%
  mutate(timestamp = as.Date(timestamp)) %>%
  group_by(trackingid) %>%
  complete(timestamp = seq(min(timestamp), max(timestamp), by = "day"), fill = list(pageimp = 0))

输出:

# A tibble: 7 x 3
# Groups:   trackingid [1]
  trackingid          timestamp  pageimp
  <fct>               <date>       <dbl>
1 1470149111625446656 2018-06-17       8
2 1470149111625446656 2018-06-18       1
3 1470149111625446656 2018-06-19       3
4 1470149111625446656 2018-06-20       0
5 1470149111625446656 2018-06-21       4
6 1470149111625446656 2018-06-22       2
7 1470149111625446656 2018-06-23       3

基本上你按 trackingid 分组,按天从最小到最大 timestamp 扩展你的数据,并使用 fill 参数用 0 填充任何缺失。