请求生成时间序列早间6:00-9:00时段NA值填充代码
仅填充每日6:00-9:00时段NA值的实现方案
针对每日6:00至9:00时段的NA值,用当日剩余时段的平均值填充,其余时段保持原样,可通过以下步骤实现:
步骤说明
- 从时间戳中提取日期和小时,用于按天分组和时段判断
- 按日期分组,计算当日非6:00-9:00时段的数值平均值(忽略该时段内的NA)
- 仅对6:00-9:00时段的NA值,替换为当日计算出的平均值
完整代码实现
# 加载所需包 library(dplyr) library(lubridate) # 生成示例数据 set.seed(3) df <- data.frame( timestamp = seq(as.POSIXct('2022-01-01', tz='utc'), as.POSIXct('2022-01-10 23:00', tz='utc'), by = '1 hour'), value = runif(240) ) df$value[runif(nrow(df)) < 0.3] <- NA # 执行填充逻辑 df_filled <- df %>% mutate( date = as.Date(timestamp), hour = hour(timestamp) ) %>% group_by(date) %>% mutate( # 计算当日非6-9点时段的平均值 daily_avg = mean(value[!hour %in% 6:9], na.rm = TRUE), # 仅填充6-9点的NA值 value_filled = ifelse(hour %in% 6:9 & is.na(value), daily_avg, value) ) %>% ungroup() %>% # 移除辅助列(可选) select(-date, -hour, -daily_avg)
验证填充结果
可以通过以下代码查看原6-9点NA值的填充情况:
df_filled %>% filter(hour(timestamp) %in% 6:9 & is.na(df$value)) %>% select(timestamp, value, value_filled)
内容的提问来源于stack exchange,提问作者Jon
相关产品推荐
相关产品推荐

