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

如何用group_by()为时间区间生成均值列并添加至数据集

按指定5年区间计算均值并添加为新列(使用dplyr的group_by)

要实现按每5年区间计算均值并填充到对应行的需求,我们可以借助dplyr包的group_by()和mutate()函数完成,具体步骤如下:

完整实现代码

# 加载dplyr包
library(dplyr)

# 原始数据集
anos <- 1988:2020
valores <- c(15, 18, 20, NA, 25, 27, 28, NA, 32, 35, 36, 38, 40, 
             42, 45, 46, NA, 50, 52, 55, 56, 58, 60, NA, 65, 66, 
             68, 70, 72, 75, 76, 78, 80)
dataset <- data.frame(Ano = anos, Valor = valores)

# 生成分组标识并计算区间均值
dataset <- dataset %>%
  # 按每5年一组生成分组ID,最后不足5年的自动归为最后一组
  mutate(grupo = floor((Ano - min(Ano)) / 5)) %>%
  # 按分组ID分组
  group_by(grupo) %>%
  # 计算每组均值(忽略NA值),并添加为新列Medias
  mutate(Medias = mean(Valor, na.rm = TRUE)) %>%
  # 取消分组(可选,后续操作不需要分组时建议取消)
  ungroup() %>%
  # 移除临时的grupo列(可选,根据需求保留或删除)
  select(-grupo)

# 查看结果
print(dataset)

关键逻辑说明

  • 分组标识生成:floor((Ano - min(Ano)) / 5) 以起始年份(1988)为基准,将年份转换为分组编号。例如:
    • 1988-1992年:(1988-1988)/5=0,(1992-1988)/5=0.8,floor后均为0,属于同一组
    • 最后一组2018-2020年:(2020-1988)/5=6.4,floor后为6,单独成组
  • 均值计算:mean(Valor, na.rm = TRUE) 自动忽略数据中的NA值,确保均值计算准确
  • 填充逻辑:mutate()会将每组的均值重复填充到该组的所有行中,完全符合需求

结果验证

运行代码后生成的Medias列与你提供的期望结果完全一致:

  • 1988-1992年均值为19.5
  • 1993-1997年均值为30.5
  • ...
  • 2018-2020年均值为78

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 15:27:45