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

如何在R中按小时对POSIXct类型的行数据求均值?

按小时聚合POSIXct时间序列数据求均值

我有一个名为df1的DataFrame,其中包含POSIXct类型的Date列,以及关联的数值列Value1和Value2,数据示例如下:

DateValue1Value2
2022-03-14 13:00:0013
2022-03-14 13:10:0024
2022-03-14 13:20:0035
2022-03-14 13:30:0046
2022-03-14 13:40:0057
2022-03-14 13:50:0068
2022-03-14 14:00:001040
2022-03-14 14:10:002050
2022-03-14 14:20:003060
2022-03-14 14:30:004070
2022-03-14 14:40:005080
2022-03-14 14:50:006090

需要按每天的小时对Value1和Value2求均值,生成新的DataFrame df2,其中Date列为对应小时的起始时间,Value1和Value2为该小时的均值。期望结果如下:

DateValue1Value2
2022-03-14 13:00:003.55.5
2022-03-14 14:00:003565

解决方案

方法1:使用dplyr + lubridate

tidyverse生态下的简洁实现:

library(dplyr)
library(lubridate)

df2 <- df1 %>%
  mutate(Date_floor = floor_date(Date, "hour")) %>%
  group_by(Date_floor) %>%
  summarise(Value1 = mean(Value1),
            Value2 = mean(Value2)) %>%
  rename(Date = Date_floor) %>%
  ungroup()

方法2:使用data.table

适合大数据集的高效实现:

library(data.table)

setDT(df1)
df2 <- df1[, .(Value1 = mean(Value1), Value2 = mean(Value2)), 
           by = .(Date = floor_date(Date, "hour"))]

方法3:基础R实现

无需额外依赖包:

# 生成小时级分组键
df1$hour_group <- as.POSIXct(strftime(df1$Date, "%Y-%m-%d %H:00:00"))

# 聚合计算均值
df2 <- aggregate(cbind(Value1, Value2) ~ hour_group, data = df1, FUN = mean)
colnames(df2)[1] <- "Date"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 21:05:54