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 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.Ready for CRAN submission.
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()