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

R语言:非规则时间间隔数据的小时均值计算求助

解决方案说明

你之前的代码只按小时数(0-23)分组,会把所有日期的同一小时数据合并计算均值,自然得不到按「天-小时」维度的汇总结果。正确的做法是按日期+小时的完整时间区间分组,以下是适配你200万行大数据量的实现方案:


方法一:用Tidyverse高效处理(适合新手)

library(tidyverse)
library(lubridate)

# 1. 批量读取并合并3个CSV文件(替换成你的实际文件名)
file_names <- c("dataset1.csv", "dataset2.csv", "dataset3.csv")
all_data <- map_dfr(file_names, read_csv)  # read_csv比read.csv更快,适配大数据

# 2. 生成完整日期时间列,并截断到小时级别(核心:把任意时间戳归到所属小时的起始点)
all_data <- all_data %>%
  mutate(
    # 合并Date和Time列成标准时间戳(如果你的Date是日-月-年格式,改用dmy_hms)
    full_datetime = ymd_hms(paste(Date, Time)),
    # 生成按小时分组的标识(比如2024-05-20 10:15:00 → 2024-05-20 10:00:00)
    hour_interval = floor_date(full_datetime, "hour")
  )

# 3. 按小时区间分组,计算Elevation均值(na.rm=TRUE处理缺失值)
hourly_elevation_mean <- all_data %>%
  group_by(hour_interval) %>%
  summarise(
    elevation_avg = mean(Elevation, na.rm = TRUE)
  )

方法二:用data.table提速(超大数据量首选)

如果200万行数据处理较慢,data.table的速度比Tidyverse快2-5倍:

library(data.table)
library(lubridate)

# 1. 批量读取合并CSV
file_names <- c("dataset1.csv", "dataset2.csv", "dataset3.csv")
all_data_dt <- rbindlist(lapply(file_names, fread))

# 2. 处理时间并计算小时均值
all_data_dt[, full_datetime := ymd_hms(paste(Date, Time))]
all_data_dt[, hour_interval := floor_date(full_datetime, "hour")]
hourly_mean_dt <- all_data_dt[, .(elevation_avg = mean(Elevation, na.rm = TRUE)), by = hour_interval]

关键注意点

  • 如果你的Date列是日-月-年格式(比如20/05/2024),把代码里的ymd_hms改成dmy_hms,否则时间戳会解析错误。
  • 若数据中有缺失值,一定要加na.rm=TRUE,不然均值会变成NA。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 07:20:33