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

在R中如何对数据框的月份列分组并计算任意月份组合的平均值

R实现任意月份组合行均值计算

实现思路

所有月份缩写均为3位字符,可先对传入的月份组合字符串按每3位分割得到目标月份列表,再提取对应列计算行平均值即可。

方案1:基础R实现

直接封装自定义函数调用即可,代码如下:

# 自定义计算月份组合行均值的函数
calc_month_group_mean <- function(df, group_str) {
  # 按每3位拆分字符串得到月份列表
  month_count <- nchar(group_str)/3
  months <- substring(group_str, seq(1, 3*month_count, 3), seq(3, 3*month_count, 3))
  # 校验月份是否存在
  if(!all(months %in% colnames(df))) {
    stop("输入的月份组合包含不存在的月份,请检查")
  }
  # 计算行均值
  rowMeans(df[, months], na.rm = TRUE)
}

调用示例

# 计算JanFeb组合均值
test_df$JanFeb <- calc_month_group_mean(test_df, "JanFeb")
# 计算MarMayNov组合均值
test_df$MarMayNov <- calc_month_group_mean(test_df, "MarMayNov")
# 查看结果
head(test_df[, c("Year", "JanFeb", "MarMayNov")])

方案2:tidyverse实现

如果你习惯dplyr的管道操作,可以用以下实现:

library(dplyr)
library(stringr)

test_df <- test_df %>%
  # 计算JanFeb组合
  mutate(JanFeb = rowMeans(across(all_of(str_extract_all("JanFeb", ".{3}")[[1]])), na.rm = TRUE),
         # 计算MarMayNov组合
         MarMayNov = rowMeans(across(all_of(str_extract_all("MarMayNov", ".{3}")[[1]])), na.rm = TRUE))

以上两种方案都支持任意2-3个月份的组合计算,输出结果为对应月份列的同行平均值,符合需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:09:02