在R中基于日期和小时维度按15分钟间隔聚合数据的方法咨询
解决方案
原有代码问题
- 仅按15分钟间隔计算值
tt分组,未加入日期维度,跨天的相同时间区间会被合并,导致结果混乱 - 手动拆分时间字符串计算分钟数的步骤冗余,直接转换为标准时间类型效率更高
方案1:tidyverse 实现(可读性高)
library(dplyr) library(lubridate) # 转换时间类型后按15分钟区间分组汇总 result <- df %>% mutate(Time = ymd_hm(Time), time_group = floor_date(Time, unit = "15 mins")) %>% group_by(time_group) %>% summarise( Date = as.Date(last(Time)), Hour = hour(last(Time)), Time = minute(last(Time)), Distance_m = sum(Distance_m, na.rm = TRUE) ) %>% select(-time_group)
方案2:data.table 实现(海量数据最优选择)
针对百万级以上的海量数据,data.table的内存优化和计算速度远优于dplyr,性能可提升3~10倍:
library(data.table) library(lubridate) setDT(df) result <- df[, Time := ymd_hm(Time) ][, time_group := floor_date(Time, unit = "15 mins") ][, .( Date = as.Date(last(Time)), Hour = hour(last(Time)), Time = minute(last(Time)), Distance_m = sum(Distance_m, na.rm = TRUE) ), by = time_group ][, !"time_group"]
两种方案输出结果均和你给出的期望结果一致。
内容的提问来源于stack exchange,提问作者Sorath Abbasi
相关产品推荐
相关产品推荐

