monitor_aqi().nowcast_to_aqi() utility function.clarity_loadLatest() and
clarity_loadAnnual(). The data archives have not yet been set up but these
functions are ready when the time comes.monitor_load().monitor_load().Minor documentation updates.
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.fullAQSID field in all loaded data.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 fieldmonitor_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.Ready for CRAN submission.
airnow_load~() functions o put parameterName argument last.test-loadData.Repa_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 AirMonitorDeveloper Style Guidemonitor_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_AQIpollutant = "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()