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

在R中如何根据日期列计算另一列的年/月均值、最大最小等统计值

R中指定时间范围的水文气象要素统计方法

第一步:预处理日期列

首先要把数据框中字符格式的Date列转换为R可识别的日期格式,推荐使用lubridate包处理,代码如下:

# 未安装包先执行 install.packages(c("tidyverse", "lubridate"))
library(tidyverse)
library(lubridate)

# 原日期格式为月/日/年,用mdy()函数转换
df <- df %>%
  mutate(Date = mdy(Date))

方法1:手动筛选指定时段计算统计量

直接通过filter()指定时间范围后计算所需指标,注意带空格的列名需要用反引号`包裹:

示例1:计算2013年全年降水的均值、最大值、最小值

df %>%
  filter(year(Date) == 2013) %>%
  summarise(
    降水均值 = mean(precipitation, na.rm = T),
    降水最大值 = max(precipitation, na.rm = T),
    降水最小值 = min(precipitation, na.rm = T)
  )

示例2:计算2013年1月A河径流的均值、最大值、最小值

df %>%
  filter(year(Date) == 2013, month(Date) == 1) %>%
  summarise(
    A河径流均值 = mean(`Stream A Discharge`, na.rm = T),
    A河径流最大值 = max(`Stream A Discharge`, na.rm = T),
    A河径流最小值 = min(`Stream A Discharge`, na.rm = T)
  )

示例3:计算2014年12月的对应指标

只需修改filter()中的年份、月份参数即可:

df %>%
  filter(year(Date) == 2014, month(Date) == 12) %>%
  summarise(
    # 此处填入要计算的指标即可,逻辑和上面一致
  )

方法2:按年/月分组批量统计所有时段指标

如果需要一次性输出所有年份、所有月份的统计结果,直接用分组计算即可:

按年分组统计所有年份的指标

year_stat <- df %>%
  group_by(年份 = year(Date)) %>%
  summarise(
    降水均值 = mean(precipitation, na.rm = T),
    降水最大值 = max(precipitation, na.rm = T),
    降水最小值 = min(precipitation, na.rm = T),
    A河径流均值 = mean(`Stream A Discharge`, na.rm = T),
    A河径流最大值 = max(`Stream A Discharge`, na.rm = T),
    A河径流最小值 = min(`Stream A Discharge`, na.rm = T)
  )

按年月分组统计所有月份的指标

month_stat <- df %>%
  group_by(年份 = year(Date), 月份 = month(Date)) %>%
  summarise(
    降水均值 = mean(precipitation, na.rm = T),
    降水最大值 = max(precipitation, na.rm = T),
    降水最小值 = min(precipitation, na.rm = T),
    A河径流均值 = mean(`Stream A Discharge`, na.rm = T),
    A河径流最大值 = max(`Stream A Discharge`, na.rm = T),
    A河径流最小值 = min(`Stream A Discharge`, na.rm = T)
  )

补充:base R实现方法(无需加载第三方包)

# 转换日期格式
df$Date <- as.Date(df$Date, format = "%m/%d/%Y")

# 示例:计算2013年全年降水均值
data_2013 <- df[format(df$Date, "%Y") == "2013", ]
precip_mean_2013 <- mean(data_2013$precipitation, na.rm = TRUE)

# 示例:计算2013年1月A河径流最大值
data_201301 <- df[format(df$Date, "%Y-%m") == "2013-01", ]
a_max_201301 <- max(data_201301$`Stream A Discharge`, na.rm = TRUE)

注意事项

  • 参数na.rm = T用于忽略缺失值,避免数据存在空值时返回报错,无缺失值可删除该参数
  • 小时尺度数据可通过hour(Date)函数筛选或按小时分组,逻辑和年、月处理完全一致

内容的提问来源于stack exchange,提问作者Sankar Manalilkada Sasidharan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:18:03