NEWS.md
monitor_nowcast()
to work in “forecast” mode – retain NowCast values in the final hour even when no PM2.5 value is available. This should match the way NowCast is calculated at AirNow. See:https://document.airnow.gov/technical-assistance-document-for-the-reporting-of-daily-air-quailty.pdf
Defaulting to the new PM_NAAQS update in all functions that accept the NAAQS
parameter.
Version 0.4 includes several new convenience functions as well as minor changes throughout the code base to support the upcoming change to the PM_NAAQS See: (PM_NAAQS update)[https://www.epa.gov/system/files/documents/2024-02/pm-naaqs-air-quality-index-fact-sheet.pdf]
Users will see an optional NAAQS
parameter in plotting functions. This parameter defaults to “PM2.5” but also accepts “PM2.5_2024” to have things colored according to the updated NAAQS thresholds.
The monitor_aqi()
, monitor_dailyThreshold()
and monitor_toAQCTAble()
functions also accept this argument and will use updated NAAQS thresholds when specified.
Version 0.4 has updated package dependencies:
MazamaCoreUtils (>= 0.5.2),
MazamaRollUtils (>= 0.1.3),
MazamaTimeSeries (>= 0.2.16),
monitor_pull()
to retrieve a column of data from either meta
or data
.monitor_slice_head()
and monitor_slice_tail()
to subset a mts_monitor object after it has been been ordered by monitor_arrange()
.monitor_setTimeAxis()
which is useful when you want to place separate monitor objects on the same time axis for plotting.aqiCategories()
to return a matrix of integers or names associated with incoming PM2.5 values.mnoitor_toAQCTable()
for easy generation of a table the number of hours or days each site spent in a particular AQ category.monitor_loadLatest()
, monitor_loadDaily()
and monitor_loadAnnual()
with improved logic to handle multiple deployments at a single location. These functions intentionally only return a single deviceDeploymentID
per locationID
and preferentially retain AirNow data over data from AIRSIS or WRCC. The new logic applies to cases where multiple deployments exist within AirNow (or AIRSIS or WRCC) and retains the deployment that has the most recent data.monitor_arrange()
to reorder time series in a mts_monitor object based on a variable in mts_monitor$meta
.monitor_loadAnnual()
when loading years before the first year of AirNow data.NW_Megafires
dataset to combine data from EPA AQS, AirNow and WRCC.epa_aqs_loadAnnual()
.monitor_loadAnnual()
to load epa_aqs
data.epaPreference
argument to monitor_load()
.monitor_combine()
with an overlapStrategy
argument. With overlapStrategy = "replace all"
, values from later timeseries (including NA
) always replace values from earlier timeseries. With overlapStrategy = "replace na"
, values from later timeseries only replace NA
values in earlier timeseries.NW_Megafires
dataset from corrected database.mts_selectWhere()
function.QC_removeSuspectData
argument to airsis_load~()
and `wrcc_load~() functions.QC_invalidateConsecutiveSuspectValues()
function.QC_removeSuspectData = TRUE
argument to airsis_load~()
and `wrcc_load~() functions to remove those monitors that have values of 2000 ug/m3. A review of the data from AIRSIS and WRCC shows some archival time series (2015, 2016, 2020) where all values are one of 0, 1K, 2K, 3K, 4K, 5K.monitor_selectWhere()
for data based selection.monitor_toPWFSLSmoke()
and monitor_fromPWFSLSmoke()
to support the fullAQSID field
monitor_filterDate()
and monitor_filterDatetime()
to allow one-sided filtering when passing in only a single startdate
or endddate
argument.Version 0.3 works with data built using a new fullAQSID
field available from AirNow. This unique identifier is more consistent and should be better supported in the future than the older AQSID
field.
This change requires a few minor changes mostly in function examples.
CRAN fixes:
CRAN fixes:
simplfy = TRUE
from calls to base::apply()
as this is the default.airnow_load~()
functions o put parameterName
argument last.test-loadData.R
epa_aqs_loadAnnual()
until those data files get rebuilt.monitor_timeRange()
.NaN
data values with NA
when loading data.AirFire_S3_archiveBaseUrl
as package data.monitor_dailyBarplot()
to use the palette
argument.Introduction to AirMonitor
Developer Style Guide
monitor_combine()
.archiveBaseUrl
to point to https://airfire-data-exports.s3.us-west-2.amazonaws.com/monitoring/v2.trimEmptyDays
argument to monitor_trimDate()
.monitor_aqi()
and support for plots including:
US_EPA$breaks_AQI
pollutant = "AQI"
option to all addAQI~()
functionsmonitor_leaflet()
so that it can handle single-timeseries monitor objects.monitor_load() and monitor_loadLatest/Daily/Monthly/Annual()
to intelligently combine data from AirNow, AIRSIS and WRCC.airsis_loadAnnual()
.monitor_leaflet()
now displays deviceDeploymentID in bold.monitor_combine()
with the replaceMeta
argument.airsis_loadAnnual()
, wrcc_loadAnnual()
, airnow_loadMonthly()
.monitor_distance()
to monitor_getDistance()
to imply that the returned object is not a mts_monitor object.monitor_filterByDistance()
.monitor_getCurrentStatus()
:
monitor_filterDate()
and monitor_filterDatetime()
.monitor_isEmpty()
.monitor_extractData()
to monitor_getData()
.monitor_extractMeta()
to monitor_getMeta()
.monitor_getCurrentStatus()
.monitor_nowcast()
.monitor_dygraph()
.monitor_mutate()
.monitor_filterData()
as too confusing because it returns an irregular time axis. Anyone wanting to do this kind of work should be familiar enough with dplyr to do it themselves.monitor_dailyStatistic()
.monitor_dailyThreshold()
.monitor_dailyBarplot()
.aqiColors()
.monitor_timeseriesPlot()
and monitor_dailyBarplot()
.airsis_loadLatest()
, wrcc_loadLatest()
.~_loadDaily()
.AQSID
to coreMetadataNames
.monitor_toCSV()
, monitor_toPWFSLSmoke()
.monitor_collapse()
, monitor_distance()
and monitor_select()
.monitor_filter()
to monitor_filterData()
to be more explicit.monitor_timeseriesPlot()
default to addAQI = FALSE
.monitor_leaflet()
now always shows higher values on top.monitor_timeseriesPlot()
.airnow_loadlatest()
.meta$countyName
rather than meta$county
. This reflects changes in MazamaLocationutils and thus the mts_monitor objects created by AirMonitorIngest.monitor_leaflet()
.monitor_timeseriesPlot()
.monitor_timeInfo()
function.CONUS
and US_52
collections of state codes.monitor_bestTimezone()
.CO
, OZONE
and PM10
data.monitor_select()
for easier selection of monitors.monitor_replaceValues()
.QC_negativeValues
argument to epa_aqs_loadAnnual()