如何用R语言openair包计算2017-2021年四种污染物的年均值、标准差及中位数?
污染物年度统计指标计算方案
针对你拥有的2017-2021年PM2.5、NO2、SO2、CO监测数据,以下两种方法可快速计算每种污染物每年的年均值、标准差和中位数:
方法一:使用openair包(专为大气数据设计,推荐)
openair是R中处理大气监测数据的专用包,自带时间聚合统计功能,操作更简便。
注意:你提供的代码写法有误
你给出的代码中,openair包并没有带year参数的mean函数,正确的时间聚合统计需使用timeAverage函数,具体实现如下:
# 首次使用需安装包,已安装可跳过 # install.packages("openair") library(openair) # 按年份聚合计算统计量 annual_stats <- timeAverage( newdata, avg.time = "year", # 指定按年聚合 statistic = c("mean", "sd", "median"), # 要计算的三个统计量 data.thresh = 75, # 可选:要求每年有效数据占比≥75%(可按需调整) na.rm = TRUE # 忽略缺失值 )
运行后,annual_stats会生成一个数据框,包含年份列(year),以及各污染物对应的均值、标准差、中位数(列名格式如pm25_mean、pm25_sd等)。
方法二:使用dplyr+lubridate包(通用数据处理流程)
如果习惯用tidyverse工具链处理数据,可采用此方法:
# 首次使用需安装包,已安装可跳过 # install.packages(c("dplyr", "lubridate")) library(dplyr) library(lubridate) # 提取年份并分组计算 annual_stats <- newdata %>% mutate(year = year(date)) %>% # 从日期列提取年份(需确保date列是R可识别的日期格式) group_by(year) %>% # 按年份分组 summarise( # PM2.5统计量 pm25_mean = mean(pm25, na.rm = TRUE), pm25_sd = sd(pm25, na.rm = TRUE), pm25_median = median(pm25, na.rm = TRUE), # NO2统计量 no2_mean = mean(no2, na.rm = TRUE), no2_sd = sd(no2, na.rm = TRUE), no2_median = median(no2, na.rm = TRUE), # SO2统计量 so2_mean = mean(so2, na.rm = TRUE), so2_sd = sd(so2, na.rm = TRUE), so2_median = median(so2, na.rm = TRUE), # CO统计量 co_mean = mean(co, na.rm = TRUE), co_sd = sd(co, na.rm = TRUE), co_median = median(co, na.rm = TRUE) )
关键注意事项
- 日期列格式:确保你的数据框
newdata中存在日期列(如命名为date),且格式为R可识别的日期时间类型,若不是,可先用as.POSIXct(newdata$date)或lubridate::ymd_hms(newdata$date)转换。 - 缺失值处理:
na.rm=TRUE参数会自动忽略缺失值,避免统计结果因缺失值变为NA。 - 数据完整性:若需要严格保证年度数据的有效性,可在计算前过滤掉有效数据占比不足的年份。
内容的提问来源于stack exchange,提问作者Dia
相关产品推荐
相关产品推荐

