NEWS.md
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().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 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_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()