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

如何在R中计算20个缓冲区的12个月数据平均值?

在R中计算每个缓冲区的月度平均值

分两种常见的数据结构场景来实现,你可以对应自己的数据集选择方法:

场景1:宽格式数据(每个月份为一列)

如果你的数据是每个缓冲区一行,12个月份各占一列(比如列名是buffer_id, jan, feb, ..., dec),直接用rowMeans()计算每行的均值最简便:

示例代码

# 假设你的数据集叫buffer_data,月度列是第2到第13列(或直接指定列名)
buffer_data$monthly_avg <- rowMeans(buffer_data[, 2:13], na.rm = TRUE)

# 如果需要指定具体月度列名,也可以这么写
buffer_data$monthly_avg <- rowMeans(buffer_data[, c("jan", "feb", "mar", "apr", "may", "jun", "jul", "aug", "sep", "oct", "nov", "dec")], na.rm = TRUE)
  • na.rm = TRUE是用来忽略缺失值的,如果你的数据没有缺失可以去掉这个参数。
  • 运行后会在原数据框新增一列monthly_avg,就是每个缓冲区的12个月平均值。

场景2:长格式数据(每行是一个缓冲区的一个月数据)

如果你的数据是每行对应一个缓冲区的某一个月数据(比如列名是buffer_id, month, value),用dplyr的分组聚合或者base R的tapply()都可以:

方法1:用dplyr(更直观)

library(dplyr)

# 按buffer_id分组,计算每个组的value均值
buffer_avg <- buffer_data %>%
  group_by(buffer_id) %>%
  summarize(monthly_avg = mean(value, na.rm = TRUE))
  • 运行后会得到一个新数据框,包含每个缓冲区ID和对应的平均值。

方法2:用base R的tapply()

# 直接计算每个buffer_id对应的value均值
avg_result <- tapply(buffer_data$value, buffer_data$buffer_id, mean, na.rm = TRUE)

# 如果需要转成数据框格式
avg_result_df <- data.frame(
  buffer_id = names(avg_result),
  monthly_avg = as.numeric(avg_result)
)

补充:宽格式转长格式(如果需要)

如果你手里是宽格式,但想改用长格式的方法处理,可以用tidyr的pivot_longer()转换:

library(tidyr)

buffer_data_long <- buffer_data %>%
  pivot_longer(cols = -buffer_id, names_to = "month", values_to = "value")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 03:27:02