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

如何按分钟计算R语言DataFrame中Speed列的平均值?

问题描述

现有如下结构的DataFrame(final_date_time列类型为POSIXct):

Id     final_date_time Speed
2022484408 2016-04-12 07:21:00    97
2022484405 2016-04-12 07:21:05   102
2022484402 2016-04-12 07:21:10   105
2022484407 2016-04-12 07:21:20   103
2022484408 2016-04-12 07:21:25   101
2022484408 2016-04-12 07:22:05    95
2022484410 2016-04-12 07:22:10    91
2022484408 2016-04-12 07:22:15    93
2022484421 2016-04-12 07:22:20    94
2022484408 2016-04-12 07:22:25    93
2022484421 2016-04-12 07:22:35    92
2022484421 2016-04-12 07:22:40    89
2022484447 2016-04-12 07:22:50    83
2022484488 2016-04-12 07:22:55    61
2022484411 2016-04-12 07:23:00    60

对应的dput信息:

structure(list(Id = c(2022484408, 2022484408, 2022484408, 2022484408, 
2022484408, 2022484408), new_final_date = structure(c(1460438460, 
1460438465, 1460438470, 1460438480, 1460438485, 1460438525), class = c("POSIXct", 
"POSIXt"), tzone = ""), Value = c(97L, 102L, 105L, 103L, 101L, 
95L)), row.names = c(NA, 6L), class = "data.frame")

你尝试的xts方法因列名错误和转换方式问题无法运行,修正后的方案及其他常用方法如下:

方法1:dplyr + lubridate(语法直观,适合常规场景)

通过floor_date将时间截断到分钟级别,再分组计算平均值:

library(dplyr)
library(lubridate)

# 假设你的DataFrame名为df
result_df <- df %>%
  # 将final_date_time截断到当前分钟的起始时刻
  mutate(minute_time = floor_date(final_date_time, unit = "minute")) %>%
  # 按分钟分组,计算Speed的平均值
  group_by(minute_time) %>%
  summarise(avg_speed = mean(Speed, na.rm = TRUE))

方法2:data.table(高效处理大数据量)

利用trunc截断时间,结合data.table的分组语法快速计算:

library(data.table)

# 将DataFrame转换为data.table格式
setDT(df)
# 按截断后的分钟时间分组,计算平均速度
result_dt <- df[, .(avg_speed = mean(Speed, na.rm = TRUE)), 
                by = .(minute_time = as.POSIXct(trunc(final_date_time, "min")))]

方法3:修正后的xts方法

针对你之前的代码,修正列名和xts对象的创建方式:

library(xts)

# 以final_date_time为索引,创建包含Speed列的xts对象
x <- xts(df$Speed, order.by = df$final_date_time)
# 按1分钟间隔计算平均值
period_avg <- period.apply(x, endpoints(x, "minutes", 1), mean)
# 转换为DataFrame格式便于查看
result_xts <- as.data.frame(period_avg) %>%
  rename(avg_speed = V1) %>%
  mutate(minute_time = index(period_avg))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 03:55:16