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

如何在R中按条件补全data.frame的小时序列(附示例)

解决方案:按规则填充小时数

我来帮你搞定这个问题~你之前用complete(hour1=c(0:23))的方式只能统一填充所有日期的0-23小时,但没法区分最小日期、最大日期和中间日期的不同规则。下面给你两种实现方案,分别基于dplyr/tidyr和data.table,都能满足你的需求:

方案一:使用dplyr + tidyr实现

这个方案逻辑清晰,适合习惯tidyverse语法的用户:

library(dplyr)
library(tidyr)

# 先定义全局的最小日期和最大日期
min_date <- min(dt$date1)
max_date <- max(dt$date1)

# 按日期分组,生成符合规则的小时序列,再合并原数据填充visits
dt_full <- dt %>%
  group_by(date1) %>%
  # 计算每个日期的最小/最大hour
  mutate(
    min_hour = min(hour1),
    max_hour = max(hour1)
  ) %>%
  # 根据日期类型生成对应的hour序列
  summarize(
    hour1 = case_when(
      # 最小日期:从该日期的最小hour到23
      date1 == min_date ~ seq(min_hour, 23, by = 1),
      # 最大日期:从0到该日期的最大hour + additional_hour
      date1 == max_date ~ seq(0, max_hour + unique(additional_hour), by = 1),
      # 其他日期:覆盖0-23
      TRUE ~ seq(0, 23, by = 1)
    ),
    additional_hour = unique(additional_hour)
  ) %>%
  # 和原数据左连接,补全visits字段
  left_join(dt %>% select(date1, hour1, visits), by = c("date1", "hour1")) %>%
  # 把缺失的visits填充为0
  mutate(visits = ifelse(is.na(visits), 0, visits)) %>%
  ungroup()

方案二:使用data.table实现

如果你的数据量较大,data.table的效率会更高:

library(data.table)

# 转换为data.table格式
setDT(dt)

# 计算全局的最小/最大日期,以及每个日期的min_hour、max_hour
dt[, `:=`(min_hour = min(hour1), max_hour = max(hour1)), by = date1]
min_date <- dt[, min(date1)]
max_date <- dt[, max(date1)]
add_hour <- dt[, unique(additional_hour)]

# 生成每个日期对应的hour序列
dt_full <- dt[, .(
  hour1 = if (date1 == min_date) {
    seq(min_hour, 23, 1)
  } else if (date1 == max_date) {
    seq(0, max_hour + add_hour, 1)
  } else {
    seq(0, 23, 1)
  },
  additional_hour = add_hour
), by = date1]

# 左连接原数据,填充缺失的visits为0
dt_full <- dt_full[dt, on = .(date1, hour1), visits := i.visits]
dt_full[is.na(visits), visits := 0]

验证结果

以你的示例数据为例:

  • 最小日期2020-01-04的hour1会从7(该日期的最小hour)填充到23
  • 最大日期2020-01-06的hour1会从0填充到16(14+2)
  • 中间日期2020-01-05的hour1会覆盖0-23
    所有缺失的visits值都会被填充为0,完全符合你的需求。

内容的提问来源于stack exchange,提问作者Yogesh Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 12:07:44