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
相关产品推荐
相关产品推荐

