首页 > 解决方案 > 时间序列缺少按频率进行的观察识别

问题描述

我有一个数据框,其中包含在大约一年的时间内从 6 个不同传感器获取的每小时平均值,其中 6 个传感器中的每一个位于 5 个不同的站点。(示例 - site_id arc1045 有传感器 0a、0b、0c、0d、0e、0f 和 site_id arc1046 有传感器 0a、0b、0c、0d、0e、0f 等)

   site_id sensor_id datetime            hourly_avg
   <chr>   <chr>     <dttm>                   <dbl>
 1 arc1045 0a        2019-11-15 09:00:00       3.67
 2 arc1045 0a        2019-11-15 10:00:00       4.68
 3 arc1045 0a        2019-11-15 11:00:00       5.63
 4 arc1045 0a        2019-11-15 12:00:00       5.8 
 5 arc1045 0a        2019-11-15 13:00:00       6.32
 6 arc1045 0a        2019-11-15 14:00:00       5.28
 7 arc1045 0a        2019-11-15 15:00:00       6.52
 8 arc1045 0a        2019-11-15 16:00:00       5.72
 9 arc1045 0a        2019-11-15 17:00:00       8.43
10 arc1045 0a        2019-11-15 18:00:00       6.62

但是,某些小时平均值缺失。我想通过检查每个 sensor_id 和 site_id 从开始日期 (2019-11-15 09:00:00) 到结束日期 (2020-08-25 15) 的每小时间隔来找出这些缺失的读数并将这些行附加 NA 值:00:11)

我可以通过每小时循环遍历数据帧来做到这一点,但是有没有更简单的方法来使用 R 包来处理这个问题?

标签: r

解决方案


您可以使用completefromtidyr来填写缺少的时间。

library(dplyr)
library(tidyr)

df %>%
  group_by(site_id, sensor_id) %>%
  complete(datetime = seq(min(datetime), max(datetime), by = 'hour'))

推荐阅读