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

如何用dplyr计算数据框中每日13点至17点的平均温度?

计算每日13点至17点的平均温度(dplyr实现)

用户提供的数据框子集

df <- structure(list(name = c("waldorf", "waldorf", "waldorf", "waldorf", 
"waldorf", "waldorf", "waldorf", "waldorf", "waldorf", "waldorf", 
"waldorf", "waldorf", "waldorf", "waldorf", "waldorf", "waldorf", 
"waldorf", "waldorf", "waldorf", "waldorf", "waldorf", "waldorf", 
"waldorf", "waldorf"), date = structure(c(1559347200, 1559347200, 
1559347200, 1559347200, 1559347200, 1559347200, 1559347200, 1559347200, 
1559347200, 1559347200, 1559347200, 1559347200, 1559347200, 1559347200, 
1559347200, 1559347200, 1559347200, 1559347200, 1559347200, 1559347200, 
1559347200, 1559347200, 1559347200, 1559347200), tzone = "UTC", class = c("POSIXct", 
"POSIXt")), time = structure(c(0, 3600, 7200, 10800, 14400, 18000, 
21600, 25200, 28800, 32400, 36000, 39600, 43200, 46800, 50400, 
54000, 57600, 61200, 64800, 68400, 72000, 75600, 79200, 82800
), class = c("hms", "difftime"), units = "secs"), datetime = structure(c(1559347200, 
1559350800, 1559354400, 1559358000, 1559361600, 1559365200, 1559368800, 
1559372400, 1559376000, 1559379600, 1559383200, 1559386800, 1559390400, 
1559394000, 1559397600, 1559401200, 1559404800, 1559408400, 1559412000, 
1559415600, 1559419200, 1559422800, 1559426400, 1559430000), tzone = "UTC", class = c("POSIXct", 
"POSIXt")), temp = c(72.9, 70.6, 69.7, 69.6, 68, 68.1, 67.9, 
67.8, 69.6, 71.9, 75.6, 78.3, 80.1, 80.8, 82.8, 83.5, 83.3, 82.9, 
81.5, 79.4, 77.6, 72.4, 70.6, 69.8)), row.names = c(NA, -24L), class = c("tbl_df", 
"tbl", "data.frame"))

解决方案:dplyr链式操作实现

可以通过dplyr结合lubridate包完成需求,步骤如下:

  1. 加载所需工具包:
library(dplyr)
library(lubridate)
  1. 核心链式操作代码:
daily_avg_temp <- df %>%
  # 筛选13:00至17:00的温度记录(包含两端时点)
  filter(hour(datetime) %in% 13:17) %>%
  # 按自然日分组(直接使用现有date列即可)
  group_by(date) %>%
  # 计算当日目标时段的平均温度,忽略缺失值
  summarise(avg_temp_13_17 = mean(temp, na.rm = TRUE)) %>%
  # 取消分组状态,避免后续操作受影响
  ungroup()

代码说明:

  • hour(datetime):从datetime列提取小时数,用于精准筛选目标时段
  • filter(hour(datetime) %in% 13:17):保留13、14、15、16、17点的所有温度数据
  • group_by(date):按数据框中已有的date列(日期)分组
  • summarise(avg_temp_13_17 = mean(temp, na.rm = TRUE)):计算每组的平均温度,na.rm = TRUE用于处理可能存在的缺失值
  • ungroup():取消分组,确保后续数据操作不受分组状态限制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 12:35:02