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()