You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按月份聚合机场每小时到达数据并填补缺失值?

解决机场小时级到达数据缺失的问题

嘿,我懂你碰到的这个痛点——当机场数据里某些小时因为没航班直接缺失时,光靠dplyr::group_by确实没法自动补全这些空白。别慌,咱们用dplyr搭配tidyr就能轻松解决,来一步步看:

第一步:整理日期时间字段(如果还没做的话)

首先得确保你的数据有清晰的年月和小时维度,或者能构建出完整的日期时间戳。用lubridate包来处理会很方便:

library(dplyr)
library(tidyr)
library(lubridate)

# 假设你的数据集叫airport_data,包含year、month、hour、arrivals字段
airport_data <- airport_data %>%
  mutate(datetime = make_datetime(year, month, 1, hour)) # 构建基础日期时间(日设为1不影响小时级分组)

第二步:补全每个月份的完整小时序列

这是核心步骤!我们按年月分组,然后用complete()函数生成每个月份0-23点的所有小时,同时填充缺失的到达数据:

full_hourly_data <- airport_data %>%
  # 按年、月分组,确保每个月份单独处理
  group_by(year, month) %>%
  # 补全0到23点的所有小时,缺失的到达数填0(按需可改为NA)
  complete(hour = 0:23, fill = list(arrivals = 0)) %>%
  ungroup()

这里的complete()会自动检查每个分组里的hour列,把缺失的小时行补出来,fill参数可以指定缺失值的填充内容——没航班的话填0很合理,要是你需要保留缺失标记,去掉fill参数就行。

第三步:适配多维度数据(如果有额外分类的话)

如果你的数据还有其他维度(比如不同航站楼、航线),只需要在group_by里加上对应的字段就行:

full_hourly_data <- airport_data %>%
  group_by(year, month, terminal) %>%
  complete(hour = 0:23, fill = list(arrivals = 0)) %>%
  ungroup()

进阶:处理带具体日期的小时数据

要是你的数据包含具体日期(比如每天的小时),可以生成整个月份的完整小时时间戳来补全:

full_hourly_data <- airport_data %>%
  group_by(year, month) %>%
  # 生成该月从第一天到最后一天的每小时序列
  complete(datetime = seq(
    from = make_datetime(year, month, 1),
    to = make_datetime(year, month, days_in_month(month)),
    by = "hour"
  ), fill = list(arrivals = 0)) %>%
  ungroup()

days_in_month()会自动获取每个月的天数,确保序列覆盖整个月份的所有小时。

简单来说,核心思路就是先为每个月份构建完整的小时集合,再把原始数据和这个集合匹配,自动补全缺失的行。这样就能得到每个月份每小时都存在的完整数据集啦!

内容的提问来源于stack exchange,提问作者Dimitar Kirilov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 08:06:23