如何用R语言按日期分组查找Excel数据的最值及对应时段
处理Excel时序数据:按日期汇总最值及对应时段
情况1:已拆分日期与时间列
假设你的数据集已拆分为date(日期型)、time(时间型)、value(数值列),用tidyverse工具链处理最直观:
步骤1:加载依赖包并读取数据
library(readxl) library(dplyr) # 读取Excel文件 df <- read_excel("你的数据文件路径.xlsx") # 确保日期和时间格式正确 df <- df %>% mutate( date = as.Date(date), time = hms::as_hms(time) # 若time是字符型,用hms包转成标准时间格式 )
步骤2:分组汇总最值及对应时段
result <- df %>% group_by(date) %>% # 提取每日最大值及对应时间(若有多个相同最大值,取最早的) slice_max(value, n = 1, with_ties = FALSE) %>% rename(max_value = value, max_time = time) %>% # 合并每日最小值及对应时间 left_join( df %>% group_by(date) %>% slice_min(value, n = 1, with_ties = FALSE) %>% rename(min_value = value, min_time = time), by = "date" ) %>% ungroup()
情况2:未拆分日期时间列(原始为datetime列)
如果数据只有一列datetime(如yyyy-mm-dd hh:mm:ss格式),先拆分再处理:
df <- read_excel("你的数据文件路径.xlsx") %>% mutate( date = as.Date(datetime), # 提取日期部分 time = hms::as_hms(datetime) # 提取时间部分 ) # 后续分组汇总代码同情况1
结果示例
若原始数据为:
| datetime | value |
|---|---|
| 2024-05-01 08:30:00 | 25 |
| 2024-05-01 12:00:00 | 32 |
| 2024-05-01 18:45:00 | 18 |
| 2024-05-02 09:15:00 | 28 |
| 2024-05-02 14:30:00 | 35 |
| 2024-05-02 20:00:00 | 22 |
运行代码后输出结果:
| date | max_value | max_time | min_value | min_time |
|---|---|---|---|---|
| 2024-05-01 | 32 | 12:00:00 | 18 | 18:45:00 |
| 2024-05-02 | 35 | 14:30:00 | 22 | 20:00:00 |
注意事项
- 若同一天存在多个相同最值,将
slice_max/slice_min中的with_ties = FALSE改为TRUE,可保留所有对应时段。 - 用
class(df$date)检查日期列格式,确保为Date类型,避免分组错误。 - 若Excel时间格式异常,可改用
format(datetime, "%H:%M:%S")将时间转为字符型存储。
内容的提问来源于stack exchange,提问作者J Smith
相关产品推荐
相关产品推荐

