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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 10:05:31