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

如何在R中按分组计算指定时长(如30分钟)的温度平均值?

解决方法

要实现按Type、Rainfall分组,同时计算指定时长(如30分钟)内的温度统计值,核心是先把时间戳聚合到目标时间窗口,再结合其他维度分组计算。你的原始代码直接用原始datetime字段分组,没有做时间窗口聚合,需要调整步骤:

步骤说明

  1. 确保datetime字段是时间格式(若当前为字符型,先转换)
  2. 将datetime截断到30分钟窗口,生成新的时间分组字段
  3. 按Type、Rainfall和新的时间窗口字段分组,计算统计值

修改后的R代码

# 加载依赖包(未安装先运行 install.packages(c("dplyr", "lubridate")))
library(dplyr)
library(lubridate)

# 确保datetime为POSIXct格式(时间格式非标准时,替换ymd_hms为对应函数如mdy_hms)
df_Temps1$datetime <- ymd_hms(df_Temps1$datetime)

# 生成30分钟时间窗口(floor_date向下取整,也可替换为ceiling_date向上取整、round_date居中取整)
df_Temps1 <- df_Temps1 %>%
  mutate(time_window = floor_date(datetime, unit = "30 minutes"))

# 分组计算温度统计值
df_Temps1.means <- df_Temps1 %>%
  group_by(Type, Rainfall, time_window) %>%
  summarise(
    Temp_mean = mean(temperature, na.rm = TRUE),
    n = n(),
    sd = sd(temperature, na.rm = TRUE),
    se = sd / sqrt(n),
    .groups = "drop" # 可选,取消分组状态方便后续操作
  ) %>%
  # 转换数值类型(按需保留,summarise后通常已为数值型)
  mutate(
    se = as.numeric(se),
    Temp_mean = as.numeric(Temp_mean)
  )

# 查看结果
df_Temps1.means

关键细节

  • 若时间格式不是yyyy-mm-dd hh:mm:ss,需调整ymd_hms为匹配的lubridate时间解析函数
  • 时间窗口的取整规则可根据需求替换floor_date为ceiling_date或round_date

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 03:42:19