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

在R语言中如何基于日期值创建年初至今的Workout平均值列

解决方法:计算年初至今的Workout累积平均值

嘿,我来帮你搞定这个需求!要给数据框添加Average_Workout列,存储每个时间点从年初到当前的Workout平均值,我们可以分步骤来操作:

关键点说明

首先要注意两个重要细节:

  • 你的Date列是字符串格式,得先转换成R能识别的日期类型
  • Workout列也是字符串,计算前要转为数值型

方法一:用dplyr包(简洁直观)

dplyr是处理数据框非常方便的工具,步骤如下:

  1. 先加载dplyr包(如果没安装的话先运行install.packages("dplyr"))
  2. 转换日期格式、按日期排序、按年份分组,最后计算累积平均
library(dplyr)

# 原始数据框
df <- data.frame(id = c('1', '2', '3', '4', '5', '6'), 
                 Date = c("01-Feb-17", "05-Feb-17", "03-May-17","24-May-17","20-Oct-17", "25-Oct-17"), 
                 Name=c("John", "Jack", "Jack", "John", "John", "Jack"), 
                 Workout=c('150', '130', '140', '160', '150', '130'))

# 处理数据并添加新列
df <- df %>%
  # 把字符串日期转成日期类型,format参数对应你的日期格式:日-月份缩写-两位年份
  mutate(Date = as.Date(Date, format = "%d-%b-%y")) %>%
  # 按日期排序,确保累积计算是按时间顺序进行的
  arrange(Date) %>%
  # 按年份分组,这样只计算当年内的累积平均,不会跨年份
  group_by(year(Date)) %>%
  # 计算累积平均:累积求和除以当前组内的行数
  mutate(Average_Workout = cumsum(as.numeric(Workout)) / row_number()) %>%
  # 取消分组,回到普通数据框
  ungroup()

方法二:用Base R(无需额外包)

如果你不想安装新包,用Base R也能实现:

# 原始数据框
df <- data.frame(id = c('1', '2', '3', '4', '5', '6'), 
                 Date = c("01-Feb-17", "05-Feb-17", "03-May-17","24-May-17","20-Oct-17", "25-Oct-17"), 
                 Name=c("John", "Jack", "Jack", "John", "John", "Jack"), 
                 Workout=c('150', '130', '140', '160', '150', '130'))

# 转换日期格式
df$Date <- as.Date(df$Date, format = "%d-%b-%y")
# 按日期排序
df <- df[order(df$Date), ]
# 提取年份,用于分组计算
df$Year <- format(df$Date, "%Y")
# 按年份计算累积平均:ave函数按Year分组,对每个组应用累积求和除以行数的函数
df$Average_Workout <- ave(as.numeric(df$Workout), df$Year, FUN = function(x) cumsum(x)/seq_along(x))
# 不需要Year列的话可以删掉
df$Year <- NULL

最终结果

运行上述代码后,你的数据框会变成这样:

id       Date Name Workout Average_Workout
1  1 2017-02-01 John     150       150.0000
2  2 2017-02-05 Jack     130       140.0000
3  3 2017-05-03 Jack     140       140.0000
4  4 2017-05-24 John     160       145.0000
5  5 2017-10-20 John     150       148.0000
6  6 2017-10-25 Jack     130       145.0000

每一行的Average_Workout就是从2017年初到当前日期所有Workout的平均值啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:45:59