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

如何将R dataframe中的月度数值替换为年度均值且保留原有列结构

实现方法

核心逻辑:无需做长宽表转换,按年份分组后直接对数值列做均值替换即可完全保留原有表结构,以下提供两种常用实现方案:


方案1:tidyverse实现(写法灵活,适合多列批量处理)

library(dplyr)
library(lubridate)

df_result <- df %>%
  mutate(year = year(ymd(date))) %>% # 从日期列提取年份
  group_by(year) %>% # 按年份分组
  # 批量替换所有数值列为对应年份均值,如需指定仅替换hfgf、lmo可改为across(c(hfgf, lmo), ~mean(.x))
  mutate(across(where(is.numeric), ~mean(.x, na.rm = TRUE))) %>%
  ungroup() %>%
  select(-year) # 删除临时生成的年份列,完全还原原有列结构

处理后数据样例:

datehfgflmo
2019-01-010.67666673.466667
2019-02-010.67666673.466667
2019-03-010.67666673.466667
2020-04-010.31500003.750000
2020-05-010.31500003.750000
2021-06-013.97000009.500000

方案2:base R实现(无需加载第三方包)

# 提取年份
df$year <- format(as.Date(df$date), "%Y")
# 按年份分组替换指定列的数值为年度均值
df[c("hfgf", "lmo")] <- lapply(c("hfgf", "lmo"), function(col) {
  ave(df[[col]], df$year, FUN = function(x) mean(x, na.rm = TRUE))
})
# 删除临时年份列
df$year <- NULL

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 15:36:02