如何按不同时间尺度整理气象数据并计算逐年逐季节累计降水量
计算年度季节累计降水量及多时间尺度数据整理方法
针对你提供的月降水量时间序列数据,以下是用R语言实现需求的具体步骤:
1. 数据预处理(日期格式转换)
首先需要将字符型的date列转换为可识别的日期格式,并提取年份、月份用于后续分组:
# 加载必要工具包 library(tidyverse) # 假设你的原始数据如下(示例) date <- c("JAN-2001", "FEB-2001", "MAR-2001", "DEC-2010") precipitation <- c(0, 3.3, 8.8, 304.5) mydata1 <- data.frame(date, precipitation) # 转换日期格式,提取年份和月份 mydata1 <- mydata1 %>% mutate( date = parse_date_time(date, "%b-%Y"), # 将"JAN-2001"转为标准日期 year = year(date), month = month(date) )
2. 定义季节并计算累计降水量
气象领域常用季节划分:春季(3-5月)、夏季(6-8月)、秋季(9-11月)、冬季(12-2月)。注意12月会归属到下一年的冬季(例如2010年12月属于2011年冬季),需调整年份标签:
# 添加季节和季节归属年份列 mydata1 <- mydata1 %>% mutate( season = case_when( month %in% 3:5 ~ "春季", month %in% 6:8 ~ "夏季", month %in% 9:11 ~ "秋季", month %in% c(1,2,12) ~ "冬季" ), season_year = ifelse(month == 12, year + 1, year) ) # 按季节年份和季节分组,计算累计降水量 seasonal_total_precip <- mydata1 %>% group_by(season_year, season) %>% summarise(total_precip = sum(precipitation, na.rm = TRUE)) %>% ungroup()
执行后seasonal_total_precip即为每年各季节的累计降水量结果。
3. 不同时间尺度的数据整理方法
月度尺度
直接按年份和月份分组,可计算月度累计/平均降水量:
monthly_precip <- mydata1 %>% group_by(year, month) %>% summarise(total_precip = sum(precipitation, na.rm = TRUE))
季度尺度
利用lubridate的quarter()函数提取季度,再分组汇总:
quarterly_precip <- mydata1 %>% mutate(quarter = quarter(date)) %>% group_by(year, quarter) %>% summarise(total_precip = sum(precipitation, na.rm = TRUE))
年度尺度
按年份直接分组计算年累计降水量:
annual_precip <- mydata1 %>% group_by(year) %>% summarise(total_precip = sum(precipitation, na.rm = TRUE))
自定义时间窗口
例如按半年、每3个月等自定义周期,使用floor_date()函数实现:
# 半年尺度 half_year_precip <- mydata1 %>% mutate(half_year = floor_date(date, "6 months")) %>% group_by(half_year) %>% summarise(total_precip = sum(precipitation, na.rm = TRUE)) # 每3个月自定义窗口(非自然季度) custom_3month_precip <- mydata1 %>% mutate(custom_period = floor_date(date, "3 months")) %>% group_by(custom_period) %>% summarise(total_precip = sum(precipitation, na.rm = TRUE))
注:所有汇总步骤中加入
na.rm = TRUE是为了处理可能存在的缺失数据,根据实际需求可调整。
内容的提问来源于stack exchange,提问作者Sorena
相关产品推荐
相关产品推荐

