An interactive 'shiny'-based tool for exploration and quality
assurance and quality control (QA/QC) of eddy covariance flux tower
data processing. It generates data-point removal code via
user-directed selection from a scatterplot, and can export a cleaned
.csv with removed points set to NA plus an R script for
reproducibility. Reference: Key (2025)
Interactive Shiny application for exploration and QA/QC of eddy covariance data.
Streamlines post-processing of eddy covariance datasets (e.g., after EddyPro) to detect and remove outliers, enforce physical ranges, and generate reproducible R code for AmeriFlux submissions.
Fluxtools is an independent project and is not affiliated with or endorsed by the AmeriFlux Network. “AmeriFlux” is a registered trademark of Lawrence Berkeley National Laboratory and is used here for identification purposes only.
If you use fluxtools in your workflow, please cite:
Key, K. (2025). fluxtools (version 0.7.0) [Computer software]. Zenodo.
https://doi.org/10.5281/zenodo.15597159
#key-features
Interactive scatter
Choose TIMESTAMP_START (time) or any numeric variable for X; choose any numeric variable for Y. Drag a box or lasso to flag points
Multi-year support
Upload up to ~1GB CSV (all years by default, or select one/more years)
Time subset support
Subset data view based on year(s), month(s), day(s), or time of day
Compare two datasets (A/B)
Upload Dataset B, choose labels/colors, and compare variables side by side (with optional smoothers and bottom legend)
Overlay multiple variables
Plot several Y variables together with color palettes or custom overrides
Add smoothed line(s)
LOESS smoother with optional 95% CI; toggle “Only smoothed line(s)” to hide base traces
±σ outlier highlighting
Slider marks points beyond n standard deviations from a linear fit; click Select ±σ outliers to add them
Accumulate & undo
Add selections to an accumulated list and remove them later if needed
Use Apply removals to commit NA changes, and Reload original data to revert
Physical Range Module (PRM)
Clamp variables to physically reasonable ranges (AmeriFlux Technical Note, Table A1)
Out-of-range → NA. QC columns are ignored by PRM by default
Undo PRM reverts only PRM-applied changes
Reproducible outputs
Export a cleaned CSV (removed values set to NA) and an R script with the exact transformations
If PRM was applied, a summary table, audit CSV, and a manual replay script are included
Dark/Light mode
Toggle theme on the fly
#installation
# From CRAN
install.packages("fluxtools")
# Newest version from GitHub
library(devtools)
devtools::install_github("kesondrakey/fluxtools")
#quickstart
library(fluxtools)
# Launch the QA/QC Shiny app
run_fluxtools()
#data-requirements
-9999, -9999.0, -9999.00, -9999.000, NaN, and empty strings are treated as NA#how-it-works Timestamp Parsing & Time Zones #timestamp-parsing--time-zones
Interactive QC & Selection #interactive-qc--selection
NA_real_Outlier Detection #outlier-detection
Time Slider (Inside / Outside) #time-slider-inside--outside
Manual Range Filters #manual-range-filters
Compare two datasets
Plot multiple variables
Add smoothed line
Physical Range Module (PRM) #physical-range-module-prm
NA; QC columns are ignored by defaultprm_summary.csv (bounds and counts)prm_removed_values.csv (cell-level audit)manual_prm_removed.R (replay script)Example:
# View PRM rule table
get_prm_rules()
# Apply to all present families
res <- apply_prm(df)
res$data # clamped data
res$summary # per-column stats (min, max, n_replaced, pct_replaced)
# Apply to selected families
res2 <- apply_prm(df, include = c("SWC", "P"))
PRM ranges (and name) were sourced from Ameriflux
Code Generation & Copy-All #code-generation--copy-all
Export cleaned data: downloads a ZIP containing
raw_df.csv (original upload, unchanged)
fluxtools_processed_df_.csv (cleaned, NA applied)
fluxtools_removal_script.R (replays removals)
If PRM was applied:
prm_summary.csv (bounds + replacements)
prm_removed_values.csv (audit of values removed)
manual_prm_removed.R (cell-level replay)
Reload original data: restores the initial CSV to start over
browseVignettes("fluxtools")
# or
vignette("introduction", package = "fluxtools")
If you use fluxtools in publications, please cite:
Key, K. (2025). fluxtools (version 0.7.0) [Computer software]. Zenodo. https://doi.org/10.5281/zenodo.15597159
This package is free software, released under the GNU General Public License v3 (GPL-3). See the LICENSE file for details.
Fluxtools is an independent project and is not affiliated with or endorsed by the AmeriFlux Network. “AmeriFlux” is a registered trademark of Lawrence Berkeley National Laboratory and is used here for identification purposes only.