Using the forestNETN R package

Getting started

Installation

Step 1. Install the latest version of R, RStudio, and RTools44

If you’re on an NPS computer, use the Company Portal to install required software. If not on an NPS computer, use the following links:

Step 2. Install pak package in R:

install.packages('pak')

Step 3. Install forestNETN from GitHub

Note that whenever the forestNETN package is updated, you can rerun this code to install the latest version.

library(pak)
pak::pkg_install('doi-nps/forestNETN')

Step 4. Load forestNETN R package

library(forestNETN)

Step 5. Import forestNETN data

Note that R is not able to connect to files on Sharepoint or MS Teams (b/c Teams also stores all files on Sharepoint). That means you need to store data package files on your local machine or on a network server. The default option for importing data will add the data package views (i.e., flatfiles) to an environment called VIEWS_NETN to your Environment work space (i.e. Environment tab in top right panel). If you would rather import each individual view into your R session, specify with the new_env argument (e.g., importData(new_env = F)).

The NETN forest data package is organized as a series of stand alone views (i.e., csvs) of stand, tree, sapling, seedling, herbaceous, and soil data. For metadata on each view and the data package overall, refer to the NETN_FHM_2006_2026_metadata.xml file in the data package. A more readable version of the metadata is also available on NPS DataStore: NETN Forest Data Package. Clicking on an individual view and selecting the “Show Data Table Info” button gives you definitions of the columns in an individual view.

Option 1

To import data using the default settings (i.e. run importData() with no arguments), you must have the NETN SQL database installed on your local machine with the latest local instance. This is largely for internal NPS use.

Import data using default SQL database connection

importData()
Option 2 In most cases, you’ll import NETN forest data using the csv files in the zipped data package, which can be downloaded on NPS Data Store: NETN Forest Data Package.

Import data via .csv files into the VIEWS_NETN environment. The path should be where csvs are on your machine or server.

importCSV(path = "./data/", zip_name = "NETN_Forest_20260827.zip") 
# update path to location on your computer

Another approach is to use the NPSutils package to download the data package in R, and then import the csvs.

pak::pkg_install("doi-nps/NPSutils")
NPSutils::get_data_package(2315861)
importCSV("./data/2315861")

Step 6. Play with the data

Once you’ve loaded the forestNETN package and have imported the data, you can look at the individual views with the following code:

# See list of views
names(VIEWS_NETN)

# See first 6 rows of Tree Data
head(VIEWS_NETN$TreesByEvent_NETN)

# View the Seedling Data
View(VIEWS_NETN$MicroplotSeedlings_NETN)

# Check structure of the stand info view
str(VIEWS_NETN$StandInfoPhotos_NETN)

While this approach works, the easier approach is to use the “join” functions in the R package, which access the same files, but allow you to query data based on the park, years sample, species type, etc. See specific join tabs on how to use the various functions.

Getting Help

Getting (and improving) help

The functions in forestNETN have help documentation like any R package. To view the help, you can go to the Packages tab and click on forestNETN. That will show you all the functions in the package. Clicking on individual functions will take you to the help documentation for that function.

You can also see the help of a function by running, for example:

?importCSV

If forestNETN isn’t loaded yet, you’d run:

?forestNETN::importCSV

Each function’s help includes a Description, Usage (i.e. function arguments and their defaults), Argument options/definitions, and several examples showing how the function can be used.

This is where you come in! If you notice typos or can think of better descriptions, examples, error messages, etc., please send them my way!

Finally, if you ever want to peak under the hood at the function, you can view it several ways.
  1. Keep F2 key pressed and click on the function name in R. This trick works for many but not all functions in R.
  2. View code in the GitHub katemmiller/forestNETN repo. The functions are in the R folder.

    If you want to use the print_head() function that shows output in later tabs, run the code below. This function makes the results print cleaner than if you just run head(dataframe), which is also fine.

    print_head <- function(df){
      knitr::kable(df[1:6,]) |> #, table.attr = "style='width:60%;'") |> 
        kableExtra::kable_classic(full_width = T, font_size = 12, 
                                  bootstrap_options = c("condensed")) |> 
        kableExtra::scroll_box(width = "900px")
    }

Join Functions

joinLocEvent

This function compiles location and visit-level data about each plot, including years sampled, X/Y coordinates taken at the plot center, and notes about the site. This function is often used to join the results of other functions to, to ensure that all plots are represented in the final dataset.

Compile all visits that have occurred in ACAD

acad <- joinLocEvent(park = "ACAD")

Compile the most recent sample of each plot in ACAD

Note that in 2021, two panels were sampled. To get the most recent survey of each plot, the 3rd panel should be dropped.

acad4yr <- joinLocEvent(park = "ACAD", from = 2023, to = 2026) 

print_head(acad4yr[,1:24]) # dropping long text fields
Plot_Name Network ParkUnit ParkSubUnit PlotTypeCode PanelCode PlotCode IsAbandoned PlotID xCoordinate yCoordinate ZoneCode PhysiographyCode PhysiographyLabel PhysiographySummary Aspect Orientation GRTS IsOrientationChanged IsStuntedWoodland EventID IsQAQC SampleYear SampleDate
6 ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 FALSE 1 574066 4913328 19N 31 Swamps/Bogs Hydric 0 232 17 FALSE FALSE 1869 FALSE 2026 2026-06-22
12 ACAD-002 NETN ACAD ACAD_Schoodic VS 1 2 FALSE 9 575371 4911411 19N 22 Rolling Uplands Mesic 360 136 19 FALSE FALSE 1870 FALSE 2026 2026-06-22
18 ACAD-003 NETN ACAD ACAD_Schoodic VS 1 3 FALSE 24 574969 4909331 19N 11 Dry Tops Xeric 150 336 31 FALSE TRUE 1878 FALSE 2026 2026-06-21
24 ACAD-004 NETN ACAD ACAD_MDI_East VS 1 4 FALSE 25 556272 4914012 19N 21 Flatwoods Mesic 290 110 36 FALSE FALSE 1853 FALSE 2026 2026-06-15
30 ACAD-005 NETN ACAD ACAD_MDI_East VS 1 5 FALSE 33 563669 4911926 19N 12 Dry Slopes Xeric 360 182 32 FALSE FALSE 1861 FALSE 2026 2026-06-14
36 ACAD-006 NETN ACAD ACAD_MDI_East VS 1 6 FALSE 48 556874 4909854 19N 11 Dry Tops Xeric 100 286 2 FALSE TRUE 1892 FALSE 2026 2026-07-05

Compile the most recent sample of each plot in ACAD, excluding stunted woodlands.

acad4yr <- joinLocEvent(park = "ACAD", from = 2023, to = 2026) |> 
  dplyr::filter(IsStuntedWoodland == FALSE)

print_head(acad4yr[,1:24]) # dropping long text fields
Plot_Name Network ParkUnit ParkSubUnit PlotTypeCode PanelCode PlotCode IsAbandoned PlotID xCoordinate yCoordinate ZoneCode PhysiographyCode PhysiographyLabel PhysiographySummary Aspect Orientation GRTS IsOrientationChanged IsStuntedWoodland EventID IsQAQC SampleYear SampleDate
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 FALSE 1 574066 4913328 19N 31 Swamps/Bogs Hydric 0 232 17 FALSE FALSE 1869 FALSE 2026 2026-06-22
ACAD-002 NETN ACAD ACAD_Schoodic VS 1 2 FALSE 9 575371 4911411 19N 22 Rolling Uplands Mesic 360 136 19 FALSE FALSE 1870 FALSE 2026 2026-06-22
ACAD-004 NETN ACAD ACAD_MDI_East VS 1 4 FALSE 25 556272 4914012 19N 21 Flatwoods Mesic 290 110 36 FALSE FALSE 1853 FALSE 2026 2026-06-15
ACAD-005 NETN ACAD ACAD_MDI_East VS 1 5 FALSE 33 563669 4911926 19N 12 Dry Slopes Xeric 360 182 32 FALSE FALSE 1861 FALSE 2026 2026-06-14
ACAD-007 NETN ACAD ACAD_MDI_East VS 1 7 FALSE 49 556675 4910889 19N 23 Moist Slopes and Coves Mesic 338 161 21 FALSE FALSE 1879 FALSE 2026 2026-06-22
ACAD-008 NETN ACAD ACAD_MDI_East VS 1 8 FALSE 57 558967 4908990 19N 32 Small Drain Hydric 70 259 33 FALSE FALSE 1893 FALSE 2026 2026-07-06

joinAdditionalSpecies

Compiles a list of additional species, which are species detected on the plot during a timed 15-minute search of the plot, and only includes species not detected in other protocol modules (i.e. microplots or quadrats).

View additional species for all plots in WEFA

wefa <- joinAdditionalSpecies(park = "WEFA")
print_head(wefa)
Plot_Name Network ParkUnit ParkSubUnit PlotTypeCode PanelCode PlotCode PlotID EventID IsQAQC SampleYear SampleDate cycle SQAddSppCode TSN ScientificName addspp_present Exotic InvasiveNETN Confidence IsCollected Note SQAddSppNotes
WEFA-001 NETN WEFA WEFA VS 2 1 8 29 FALSE 2007 2007-07-04 1 SS 18722 Actaea pachypoda 1 FALSE FALSE 0 FALSE NA NA
WEFA-001 NETN WEFA WEFA VS 2 1 8 29 FALSE 2007 2007-07-04 1 SS 19290 Quercus alba 1 FALSE FALSE 0 FALSE NA NA
WEFA-001 NETN WEFA WEFA VS 2 1 8 29 FALSE 2007 2007-07-04 1 SS 19408 Quercus rubra 1 FALSE FALSE 0 FALSE NA NA
WEFA-001 NETN WEFA WEFA VS 2 1 8 29 FALSE 2007 2007-07-04 1 SS 19504 Carpinus caroliniana 1 FALSE FALSE 0 FALSE NA NA
WEFA-001 NETN WEFA WEFA VS 2 1 8 29 FALSE 2007 2007-07-04 1 SS 22444 Populus 1 FALSE FALSE 0 FALSE NA NA
WEFA-001 NETN WEFA WEFA VS 2 1 8 29 FALSE 2007 2007-07-04 1 SS 23677 Kalmia latifolia 1 FALSE FALSE 0 FALSE NA NA

joinCWDData

Compiles coarse wood debris (CWD) volumn data (m3/ha). Coarse woody debris is sampled along three 15m line-intercept transects per plot.

View CWD volume for all plots in ACAD

acad <- joinCWDData(park = "ACAD")
print_head(acad)
Plot_Name ParkUnit ParkSubUnit SampleYear SampleDate cycle IsQAQC TSN ScientificName DecayClassCode CWD_Vol
ACAD-001 ACAD ACAD_Schoodic 2006 2006-06-06 1 FALSE 18034 Picea rubens 1 3.953260
ACAD-001 ACAD ACAD_Schoodic 2006 2006-06-06 1 FALSE 18034 Picea rubens 3 25.833453
ACAD-001 ACAD ACAD_Schoodic 2006 2006-06-06 1 FALSE 18034 Picea rubens 2 3.321836
ACAD-001 ACAD ACAD_Schoodic 2010 2010-07-27 2 FALSE 18034 Picea rubens 4 7.937905
ACAD-001 ACAD ACAD_Schoodic 2010 2010-07-27 2 FALSE 18034 Picea rubens 3 27.950232
ACAD-001 ACAD ACAD_Schoodic 2010 2010-07-27 2 FALSE 18034 Picea rubens 1 3.755685

View CWD volume for the most recent survey of plots in MABI outputting in ft3/acre

mabi_ac <- joinCWDData(park = "MABI", from = 2023, to = 2026, units = "acres")
print_head(mabi_ac)
Plot_Name ParkUnit ParkSubUnit SampleYear SampleDate cycle IsQAQC TSN ScientificName DecayClassCode CWD_Vol
MABI-001 MABI MABI 2023 2023-06-05 5 FALSE NA None present NA 0.00000
MABI-001 MABI MABI 2023 2023-06-05 5 FALSE 19481 Betula alleghaniensis 1 43.83618
MABI-002 MABI MABI 2023 2023-06-05 5 FALSE 183385 Pinus strobus 3 1795.48216
MABI-003 MABI MABI 2023 2023-06-07 5 FALSE -9999999944 Unknown Hardwood 3 225.21861
MABI-003 MABI MABI 2023 2023-06-07 5 FALSE NA None present NA 0.00000
MABI-003 MABI MABI 2023 2023-06-07 5 FALSE 28731 Acer saccharum 3 711.88223

joinMicroSaplings

Compiles sapling data collected within three 2-m radius microplots on the plot. Saplings are >=1cm DBH and <10cm DBH.

View sapling data for all plots in ACAD

acad <- joinMicroSaplings(park = "ACAD")
print_head(acad)
Plot_Name Network ParkUnit ParkSubUnit PlotTypeCode PanelCode PlotCode PlotID EventID SampleYear SampleDate cycle IsQAQC SQSaplingCode MicroplotCode TSN ScientificName CanopyExclusion Exotic InvasiveNETN DBHcm Count
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1 2006 2006-06-06 1 FALSE NS B NA Not Sampled NA NA NA NA NA
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1 2006 2006-06-06 1 FALSE NS UL NA Not Sampled NA NA NA NA NA
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1 2006 2006-06-06 1 FALSE NP UR NA None present NA NA NA NA 0
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 2 2010 2010-07-27 2 FALSE SS B 18032 Abies balsamea FALSE FALSE FALSE 2.7 1
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 2 2010 2010-07-27 2 FALSE SS B 18032 Abies balsamea FALSE FALSE FALSE 2.1 1
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 2 2010 2010-07-27 2 FALSE SS B 18032 Abies balsamea FALSE FALSE FALSE 2.5 1

View sapling data for native canopy-forming species only for all plots in ACAD

acad_natcan <- joinMicroSaplings(park = "ACAD", speciesType = "native", canopyForm = "canopy")
print_head(acad_natcan)
Plot_Name Network ParkUnit ParkSubUnit PlotTypeCode PanelCode PlotCode PlotID EventID SampleYear SampleDate cycle IsQAQC SQSaplingCode MicroplotCode TSN ScientificName CanopyExclusion Exotic InvasiveNETN DBHcm Count
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1 2006 2006-06-06 1 FALSE NS B NA Not Sampled NA NA NA NA NA
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1 2006 2006-06-06 1 FALSE NS UL NA Not Sampled NA NA NA NA NA
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1 2006 2006-06-06 1 FALSE NP UR NA None present NA NA NA NA 0
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 2 2010 2010-07-27 2 FALSE SS B 18032 Abies balsamea FALSE FALSE FALSE 2.7 1
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 2 2010 2010-07-27 2 FALSE SS B 18032 Abies balsamea FALSE FALSE FALSE 2.1 1
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 2 2010 2010-07-27 2 FALSE SS B 18032 Abies balsamea FALSE FALSE FALSE 2.5 1

joinMicroSeedlings

Compiles seedling data collected within three 2-m radius microplots on the plot. Seedlings are >=15cm tall and <1cm DBH, and are tallied by size class.

View seedling data for all plots in SARA

sara <- joinMicroSeedlings(park = "SARA")
print_head(sara)
Plot_Name Network ParkUnit ParkSubUnit PlotTypeCode PanelCode PlotCode PlotID EventID SampleYear SampleDate cycle IsQAQC SQSeedlingCode SQSeedlingNotes MicroplotCode TSN ScientificName CanopyExclusion Exotic InvasiveNETN Seedlings_15_30cm Seedlings_30_100cm Seedlings_100_150cm Seedlings_Above_150cm tot_seeds
SARA-001 NETN SARA SARA VS 1 1 7 25 2006 2006-08-08 1 FALSE NS NA B NA Not Sampled NA NA NA NA NA NA NA NA
SARA-001 NETN SARA SARA VS 1 1 7 25 2006 2006-08-08 1 FALSE NS NA UL NA Not Sampled NA NA NA NA NA NA NA NA
SARA-001 NETN SARA SARA VS 1 1 7 25 2006 2006-08-08 1 FALSE NP NA UR NA None present NA NA NA 0 0 0 0 0
SARA-001 NETN SARA SARA VS 1 1 7 26 2010 2010-06-02 2 FALSE SS NA B 32931 Fraxinus americana FALSE FALSE FALSE 3 3 0 0 6
SARA-001 NETN SARA SARA VS 1 1 7 26 2010 2010-06-02 2 FALSE SS NA UL 19300 Quercus bicolor FALSE FALSE FALSE 3 3 0 0 6
SARA-001 NETN SARA SARA VS 1 1 7 26 2010 2010-06-02 2 FALSE SS NA UL 19049 Ulmus americana FALSE FALSE FALSE 1 0 0 0 1

View seedling data for native canopy-forming species only for all plots in SARA

sara_natcan <- joinMicroSeedlings(park = "SARA", speciesType = "native", canopyForm = "canopy")
print_head(sara_natcan)
Plot_Name Network ParkUnit ParkSubUnit PlotTypeCode PanelCode PlotCode PlotID EventID SampleYear SampleDate cycle IsQAQC SQSeedlingCode SQSeedlingNotes MicroplotCode TSN ScientificName CanopyExclusion Exotic InvasiveNETN Seedlings_15_30cm Seedlings_30_100cm Seedlings_100_150cm Seedlings_Above_150cm tot_seeds
SARA-001 NETN SARA SARA VS 1 1 7 25 2006 2006-08-08 1 FALSE NS NA B NA Not Sampled NA NA NA NA NA NA NA NA
SARA-001 NETN SARA SARA VS 1 1 7 25 2006 2006-08-08 1 FALSE NS NA UL NA Not Sampled NA NA NA NA NA NA NA NA
SARA-001 NETN SARA SARA VS 1 1 7 25 2006 2006-08-08 1 FALSE NP NA UR NA None present NA NA NA 0 0 0 0 0
SARA-001 NETN SARA SARA VS 1 1 7 26 2010 2010-06-02 2 FALSE SS NA B 32931 Fraxinus americana FALSE FALSE FALSE 3 3 0 0 6
SARA-001 NETN SARA SARA VS 1 1 7 26 2010 2010-06-02 2 FALSE SS NA UL 19300 Quercus bicolor FALSE FALSE FALSE 3 3 0 0 6
SARA-001 NETN SARA SARA VS 1 1 7 26 2010 2010-06-02 2 FALSE SS NA UL 19049 Ulmus americana FALSE FALSE FALSE 1 0 0 0 1

joinRegenData

This function combines the sapling and seedling data from the previous 2 functions and also calculates a regeneration stocking index.

View regeneration data for all plots in ACAD

acad <- joinRegenData(park = "ACAD")
print_head(acad)
Plot_Name Network ParkUnit ParkSubUnit PlotTypeCode PanelCode PlotCode PlotID EventID IsQAQC SampleYear SampleDate cycle TSN ScientificName CanopyExclusion Exotic InvasiveNETN num_micros_seed num_micros_sap seed_15_30cm seed_30_100cm seed_100_150cm seed_p150cm stock seed_den sap_den sap_den_SI regen_den
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1 FALSE 2006 2006-06-06 1 18032 Abies balsamea FALSE FALSE FALSE 1 1 1.000000 1.000000 1.0000000 0.0000000 23.00000 3.000000 0.0000000 0.0000000 3.000000
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1 FALSE 2006 2006-06-06 1 183302 Picea mariana FALSE FALSE FALSE 1 1 15.000000 20.000000 0.0000000 0.0000000 55.00000 35.000000 0.0000000 0.0000000 35.000000
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 2 FALSE 2010 2010-07-27 2 18032 Abies balsamea FALSE FALSE FALSE 3 3 0.000000 3.000000 0.3333333 0.3333333 96.00000 3.666667 2.0000000 1.3333333 5.666667
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 2 FALSE 2010 2010-07-27 2 18034 Picea rubens FALSE FALSE FALSE 3 3 5.000000 23.666667 2.0000000 0.0000000 109.00000 30.666667 0.3333333 0.3333333 31.000000
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 3 FALSE 2014 2014-07-14 3 18032 Abies balsamea FALSE FALSE FALSE 3 3 1.666667 1.333333 0.0000000 0.0000000 37.66667 3.000000 2.3333333 0.6666667 5.333333
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 3 FALSE 2014 2014-07-14 3 18034 Picea rubens FALSE FALSE FALSE 3 3 9.666667 20.666667 4.3333333 0.3333333 187.66667 35.000000 0.6666667 0.6666667 35.666667

View sapling data for native canopy-forming species only for all plots in ACAD

acad_natcan <- joinRegenData(park = "ACAD", speciesType = "native", canopyForm = "canopy")
print_head(acad_natcan)
Plot_Name Network ParkUnit ParkSubUnit PlotTypeCode PanelCode PlotCode PlotID EventID IsQAQC SampleYear SampleDate cycle TSN ScientificName CanopyExclusion Exotic InvasiveNETN num_micros_seed num_micros_sap seed_15_30cm seed_30_100cm seed_100_150cm seed_p150cm stock seed_den sap_den sap_den_SI regen_den
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1 FALSE 2006 2006-06-06 1 18032 Abies balsamea FALSE FALSE FALSE 1 1 1.000000 1.000000 1.0000000 0.0000000 23.00000 3.000000 0.0000000 0.0000000 3.000000
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1 FALSE 2006 2006-06-06 1 183302 Picea mariana FALSE FALSE FALSE 1 1 15.000000 20.000000 0.0000000 0.0000000 55.00000 35.000000 0.0000000 0.0000000 35.000000
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 2 FALSE 2010 2010-07-27 2 18032 Abies balsamea FALSE FALSE FALSE 3 3 0.000000 3.000000 0.3333333 0.3333333 96.00000 3.666667 2.0000000 1.3333333 5.666667
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 2 FALSE 2010 2010-07-27 2 18034 Picea rubens FALSE FALSE FALSE 3 3 5.000000 23.666667 2.0000000 0.0000000 109.00000 30.666667 0.3333333 0.3333333 31.000000
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 3 FALSE 2014 2014-07-14 3 18032 Abies balsamea FALSE FALSE FALSE 3 3 1.666667 1.333333 0.0000000 0.0000000 37.66667 3.000000 2.3333333 0.6666667 5.333333
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 3 FALSE 2014 2014-07-14 3 18034 Picea rubens FALSE FALSE FALSE 3 3 9.666667 20.666667 4.3333333 0.3333333 187.66667 35.000000 0.6666667 0.6666667 35.666667

joinMicroNotes

Compiles any notes written about the microplots.

View sapling data for most recent survey of plots in MORR

morr <- joinMicroNotes(park = "MORR", from = 2023, to = 2026)
head(morr)
##   Plot_Name
## 1  MORR-017
##   PlotID
## 1    126
##   EventID
## 1    1816
##   SampleYear
## 1       2026
##   IsQAQC
## 1  FALSE
##        Note_Type
## 1 Micro_Seedling
##    Sample_Info
## 1 Microplot: B
##                  Notes
## 1 At least one browsed

joinMicroShrubData

Compiles shrub and woody vine percent cover data estimated in three 2-m radius microplots. Shrubs must be >=30cm tall to be recorded. Vine cover is only estimated up to 2m tall.

View shrub data for all plots in ACAD

acad <- joinMicroShrubData(park = "ACAD")
print_head(acad)
Plot_Name Network ParkUnit ParkSubUnit PlotTypeCode PanelCode PlotCode PlotID EventID IsQAQC SampleYear SampleDate cycle TSN ScientificName Pct_Cov_UR Pct_Cov_UL Pct_Cov_B Txt_Cov_UR Txt_Cov_UL Txt_Cov_B shrub_avg_cov shrub_pct_freq Exotic InvasiveNETN Shrub Vine
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1 FALSE 2006 2006-06-06 1 NA None present NA NA NA Not Collected Not Sampled Not Sampled NA 0 NA NA NA NA
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 2 FALSE 2010 2010-07-27 2 NA None present 0 0 0 0% 0% 0% 0 0 NA NA NA NA
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 3 FALSE 2014 2014-07-14 3 NA None present 0 0 0 0% 0% 0% 0 0 NA NA NA NA
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 4 FALSE 2018 2018-07-02 4 NA None present 0 0 0 0% 0% 0% 0 0 NA NA NA NA
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1517 FALSE 2022 2022-07-14 5 NA None present 0 0 0 0% 0% 0% 0 0 NA NA NA NA
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 6 NA None present 0 0 0 0% 0% 0% 0 0 NA NA NA NA

View shrub data for invasive species only for all plots in SARA from most recent survey of plots

sara_exo <- joinMicroShrubData(park = "SARA", speciesType = "invasive")
print_head(sara_exo)
Plot_Name Network ParkUnit ParkSubUnit PlotTypeCode PanelCode PlotCode PlotID EventID IsQAQC SampleYear SampleDate cycle TSN ScientificName Pct_Cov_UR Pct_Cov_UL Pct_Cov_B Txt_Cov_UR Txt_Cov_UL Txt_Cov_B shrub_avg_cov shrub_pct_freq Exotic InvasiveNETN Shrub Vine
SARA-001 NETN SARA SARA VS 1 1 7 26 FALSE 2010 2010-06-02 2 -9999999945 Lonicera - Exotic 0 3.0 7.5 0% 1-5% 5-10% 5.2500000 100.00000 TRUE TRUE 1 0
SARA-001 NETN SARA SARA VS 1 1 7 26 FALSE 2010 2010-06-02 2 28573 Rhamnus cathartica 0 3.0 0.0 0% 1-5% 0% 1.5000000 50.00000 TRUE TRUE 0 0
SARA-001 NETN SARA SARA VS 1 1 7 27 FALSE 2014 2014-05-27 3 28573 Rhamnus cathartica 0 NA 0.0 0% Permanently Missing 0% NA 100.00000 TRUE TRUE 0 0
SARA-001 NETN SARA SARA VS 1 1 7 28 FALSE 2018 2018-06-04 4 28573 Rhamnus cathartica 3 3.0 0.1 1-5% 1-5% <1% 2.0333333 100.00000 TRUE TRUE 0 0
SARA-001 NETN SARA SARA VS 1 1 7 28 FALSE 2018 2018-06-04 4 -9999999945 Lonicera - Exotic 0 3.0 17.5 0% 1-5% 10-25% 6.8333333 66.66667 TRUE TRUE 1 0
SARA-001 NETN SARA SARA VS 1 1 7 28 FALSE 2018 2018-06-04 4 24833 Rosa multiflora 0 0.1 0.0 0% <1% 0% 0.0333333 33.33333 TRUE TRUE 1 0

joinQuadData

Compiles quadrat characteristic cover data collected in eight 1m2 quadrats.

View quadrat characteristic data for the most recent survey of plots in ROVA

rova <- joinQuadData(park = "ROVA", from = 2023, to = 2026)
print_head(rova)
Plot_Name Network ParkUnit ParkSubUnit PlotTypeCode PanelCode PlotCode PlotID EventID IsQAQC SampleYear SampleDate cycle CharacterLabel num_quads num_trampled quad_avg_cov quad_pct_freq SQ_UC SQ_UR SQ_MR SQ_BR SQ_BC SQ_BL SQ_ML SQ_UL Pct_Cov_UC Pct_Cov_UR Pct_Cov_MR Pct_Cov_BR Pct_Cov_BC Pct_Cov_BL Pct_Cov_ML Pct_Cov_UL Txt_Cov_UC Txt_Cov_UR Txt_Cov_MR Txt_Cov_BR Txt_Cov_BC Txt_Cov_BL Txt_Cov_ML Txt_Cov_UL
ROVA-001 NETN ROVA ROVA_HOFR_West VS 2 1 5 1653 FALSE 2024 2024-05-29 5 NonSphagnum 8 0 5.5750 100.0 SS SS SS SS SS SS SS SS 3.5 7.5 0.1 7.5 7.5 7.5 7.5 3.5 2-5% 5-10% <1% 5-10% 5-10% 5-10% 5-10% 2-5%
ROVA-001 NETN ROVA ROVA_HOFR_West VS 2 1 5 1653 FALSE 2024 2024-05-29 5 Rock 8 0 5.0625 87.5 SS SS SS SS SS SS SS SS 0.0 3.5 1.5 7.5 1.5 1.5 17.5 7.5 0% 2-5% 1-2% 5-10% 1-2% 1-2% 10-25% 5-10%
ROVA-001 NETN ROVA ROVA_HOFR_West VS 2 1 5 1653 FALSE 2024 2024-05-29 5 Stem 8 0 0.4375 12.5 SS SS SS SS SS SS SS SS 0.0 0.0 0.0 0.0 0.0 3.5 0.0 0.0 0% 0% 0% 0% 0% 2-5% 0% 0%
ROVA-001 NETN ROVA ROVA_HOFR_West VS 2 1 5 1653 FALSE 2024 2024-05-29 5 Sphagnum 8 0 0.0000 0.0 SS SS SS SS SS SS SS SS 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0% 0% 0% 0% 0% 0% 0% 0%
ROVA-001 NETN ROVA ROVA_HOFR_West VS 2 1 5 1653 FALSE 2024 2024-05-29 5 Lichens 8 0 0.2375 62.5 SS SS SS SS SS SS SS SS 0.0 0.1 0.0 0.1 0.0 0.1 1.5 0.1 0% <1% 0% <1% 0% <1% 1-2% <1%
ROVA-001 NETN ROVA ROVA_HOFR_West VS 2 1 5 1653 FALSE 2024 2024-05-29 5 Soil 8 0 0.1875 12.5 SS SS SS SS SS SS SS SS 1.5 0.0 0.0 0.0 0.0 0.0 0.0 0.0 1-2% 0% 0% 0% 0% 0% 0% 0%

joinQuadSpecies

Compiles quadrat species cover data collected in eight 1m2 quadrats from the ground up to 1.5m.

View quadrat species data for the most recent survey of plots in ACAD

acad_q4yr <- joinQuadSpecies(park = "ACAD", from = 2023, to = 2026) 
print_head(acad_q4yr)
Plot_Name Network ParkUnit ParkSubUnit PlotTypeCode PanelCode PlotCode PlotID EventID IsQAQC SampleYear SampleDate cycle SQQuadSum TSN ScientificName num_quads SQ_UC SQ_UR SQ_MR SQ_BR SQ_BC SQ_BL SQ_ML SQ_UL Pct_Cov_UC Pct_Cov_UR Pct_Cov_MR Pct_Cov_BR Pct_Cov_BC Pct_Cov_BL Pct_Cov_ML Pct_Cov_UL Txt_Cov_UC Txt_Cov_UR Txt_Cov_MR Txt_Cov_BR Txt_Cov_BC Txt_Cov_BL Txt_Cov_ML Txt_Cov_UL Confidence IsGerminant quad_avg_cov quad_pct_freq Exotic InvasiveNETN Tree TreeShrub Shrub Vine Herbaceous Graminoid FernAlly QuadSppNote IsCollected
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 6 8 19478 Betula 8 SS SS SS SS SS SS SS SS 0.0 0.0 0.0 0.0 0.0 0.1 0 0.0 0% 0% 0% 0% 0% <1% 0% 0% 1 FALSE 0.0125 12.5 0 0 1 0 0 0 0 0 FALSE NA FALSE
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 6 8 28728 Acer rubrum 8 SS SS SS SS SS SS SS SS 0.0 0.0 0.0 0.1 0.1 0.1 0 0.0 0% 0% 0% <1% <1% <1% 0% 0% 1 TRUE 0.0375 37.5 0 0 1 0 0 0 0 0 FALSE NA FALSE
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 6 8 18034 Picea rubens 8 SS SS SS SS SS SS SS SS 62.5 17.5 7.5 37.5 7.5 0.0 85 62.5 50-75% 10-25% 5-10% 25-50% 5-10% 0% 75-95% 50-75% 1 FALSE 35.0000 87.5 0 0 1 0 0 0 0 0 FALSE NA FALSE
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 6 8 18032 Abies balsamea 8 SS SS SS SS SS SS SS SS 0.0 7.5 62.5 1.5 0.0 7.5 0 17.5 0% 5-10% 50-75% 1-2% 0% 5-10% 0% 10-25% 1 FALSE 12.0625 62.5 0 0 1 0 0 0 0 0 FALSE NA FALSE
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 6 8 23579 Vaccinium angustifolium 8 SS SS SS SS SS SS SS SS 0.0 1.5 0.0 0.0 0.0 0.0 0 0.0 0% 1-2% 0% 0% 0% 0% 0% 0% 1 FALSE 0.1875 12.5 0 0 0 0 1 0 0 0 FALSE NA FALSE
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 6 8 28728 Acer rubrum 8 SS SS SS SS SS SS SS SS 0.0 0.0 0.0 0.1 0.0 0.0 0 0.0 0% 0% 0% <1% 0% 0% 0% 0% 1 FALSE 0.0125 12.5 0 0 1 0 0 0 0 0 FALSE NA FALSE

joinQuadNotes

Compiles notes recorded in quadrats.

View quadrat notes for the most recent survey of plots in ROVA

rova <- joinQuadNotes(park = "ROVA", from = 2023, to = 2026)
print_head(rova)
Plot_Name Network ParkUnit ParkSubUnit PlotTypeCode PanelCode PlotCode PlotID EventID SampleYear cycle IsQAQC Note_Type Sample_Info Note_Info Notes
ROVA-001 NETN ROVA ROVA_HOFR_West VS 2 1 5 1653 2024 5 FALSE Quad_Species NA Unknown species Vitaceae
ROVA-002 NETN ROVA ROVA_HOFR_West VS 2 2 13 1654 2024 5 FALSE Quad_Species NA Athyrium filix-femina Angustatum - DW
ROVA-003 NETN ROVA ROVA_HOFR_West VS 2 3 20 1642 2024 5 FALSE Quad_Species NA Carex tiny- too small to collect
ROVA-003 NETN ROVA ROVA_HOFR_West VS 2 3 20 1642 2024 5 FALSE Quad_Species Collected Carex laxiflora ID’d by David Werier. Unk Carex 1 + 2 combined
ROVA-003 NETN ROVA ROVA_HOFR_West VS 2 3 20 1642 2024 5 FALSE Quad_Species Collected Carex rosea Unk Carex 3 - ID’d by David Werier
ROVA-004 NETN ROVA ROVA_HOFR_West VS 2 4 29 1643 2024 5 FALSE Quad_SQ_Character SS BL BL water cover is ~10%

joinSoilLabData

Compiles soil chemistry data derived from the lab. Note that soil chemistry data typically take about 6 months to be received from the lab. The latest year of available lab data is 2025. From the 3rd to 5th cycle (2014 - 2025), 8% of plots were sampled for soil chemistry, with all plots being sampled once over that period. Starting in 2026, half of ACAD plots will be sampled per year for the next 2 cycles. Note also that soil horizons are QCed based on %TC, so that horizons with >=20% TC are classified as O and horizons <20% TC are classified as A. If this check results in 2 samples with the same horizon, their chemistry is averaged weighted on the depth of each sample.

View soil chemistry data for plots in ACAD from 2007 and later.

acad_soil <- joinSoilLabData(park = "ACAD", from = 2007)
print_head(acad_soil)
Plot_Name Network ParkUnit ParkSubUnit PlotTypeCode PanelCode PlotCode PlotID EventID SampleDate SampleYear cycle IsQAQC Horizon_QC Field_misID horizon_depth Weighted num_samps soilpH pctLOI pctTN pctTC Ca K Mg P Al Fe Mn Na Zn acidity ECEC Ca_Al C_N Ca_meq K_meq Mg_meq Na_meq Al_meq Fe_meq Mn_meq Zn_meq BaseSat CaSat AlSat
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 2 2010-07-27 2010 2 FALSE O 1 8.000000 0 3 3.46 86.4 1.071 45.040 1004.7 601.35 695.30 33.70 472.60 131.25 24.900 170.80 19.85 13.365 26.39172 1.431181 42.05416 5.013473 1.537980 5.720280 0.7662629 5.2550037 0.4700090 0.0906443 0.0607126 49.40184 18.99638 19.911561
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 3 2014-07-14 2014 3 FALSE O 0 9.333333 0 3 3.99 90.9 0.857 48.521 1414.0 815.80 797.60 59.34 649.10 209.10 136.300 216.50 26.14 15.750 32.41236 1.466526 56.61727 7.055888 2.086445 6.561909 0.9712876 7.2175686 0.7487914 0.4961776 0.0799511 51.44806 21.76913 22.267952
ACAD-002 NETN ACAD ACAD_Schoodic VS 1 2 9 34 2010-07-27 2010 2 FALSE O 1 10.000000 0 3 3.49 98.6 1.269 51.910 1379.9 681.75 945.95 65.40 203.75 32.25 18.900 217.10 32.60 10.395 27.76762 4.559340 40.90623 6.885728 1.743606 7.782394 0.9739794 2.2655671 0.1154879 0.0688023 0.0997094 62.61145 24.79769 8.159026
ACAD-002 NETN ACAD ACAD_Schoodic VS 1 2 9 35 2014-07-14 2014 3 FALSE O 0 7.666667 0 3 3.71 92.3 1.289 50.017 2292.5 673.50 820.50 47.13 212.00 61.00 57.500 228.05 36.33 9.450 30.37961 7.279901 38.80295 11.439621 1.722506 6.750309 1.0231045 2.3573017 0.2184423 0.2093193 0.1111179 68.91312 37.65558 7.759485
ACAD-003 NETN ACAD ACAD_Schoodic VS 1 3 24 96 2010-07-27 2010 2 FALSE O 1 6.666667 0 3 3.77 91.5 1.162 47.920 1642.5 503.15 1307.50 39.70 256.30 78.60 15.600 448.90 25.35 9.405 31.61738 4.314284 41.23924 8.196108 1.286829 10.756890 2.0139076 2.8498888 0.2814682 0.0567892 0.0775348 70.38449 25.92279 9.013677
ACAD-003 NETN ACAD ACAD_Schoodic VS 1 3 24 98 2018-07-02 2018 4 FALSE O 0 8.666667 0 3 4.10 94.6 1.170 47.953 2270.0 756.50 1872.00 58.70 80.70 34.78 36.605 1347.50 13.26 5.225 39.77589 18.936701 40.98547 11.327345 1.934783 15.401070 6.0453118 0.8973314 0.1245479 0.1332545 0.0405567 87.26018 28.47792 2.255968

View soil chemistry data of O horizon only for plots in ACAD from 2014 and later.

acad_soilO <- joinSoilLabData(park = "ACAD", layer = "O", from = 2014)
print_head(acad_soilO)
Plot_Name Network ParkUnit ParkSubUnit PlotTypeCode PanelCode PlotCode PlotID EventID SampleDate SampleYear cycle IsQAQC Horizon_QC Field_misID horizon_depth Weighted num_samps soilpH pctLOI pctTN pctTC Ca K Mg P Al Fe Mn Na Zn acidity ECEC Ca_Al C_N Ca_meq K_meq Mg_meq Na_meq Al_meq Fe_meq Mn_meq Zn_meq BaseSat CaSat AlSat
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 3 2014-07-14 2014 3 FALSE O 0 9.333333 0 3 3.99 90.9 0.857 48.521 1414.0 815.80 797.6 59.34 649.10 209.10 136.300 216.50 26.14 15.750 32.41236 1.4665261 56.61727 7.055888 2.0864450 6.561909 0.9712876 7.2175686 0.7487914 0.4961776 0.0799511 51.44806 21.76913 22.267952
ACAD-002 NETN ACAD ACAD_Schoodic VS 1 2 9 35 2014-07-14 2014 3 FALSE O 0 7.666667 0 3 3.71 92.3 1.289 50.017 2292.5 673.50 820.5 47.13 212.00 61.00 57.500 228.05 36.33 9.450 30.37961 7.2799012 38.80295 11.439621 1.7225064 6.750309 1.0231045 2.3573017 0.2184423 0.2093193 0.1111179 68.91312 37.65558 7.759485
ACAD-003 NETN ACAD ACAD_Schoodic VS 1 3 24 98 2018-07-02 2018 4 FALSE O 0 8.666667 0 3 4.10 94.6 1.170 47.953 2270.0 756.50 1872.0 58.70 80.70 34.78 36.605 1347.50 13.26 5.225 39.77589 18.9367011 40.98547 11.327345 1.9347826 15.401070 6.0453118 0.8973314 0.1245479 0.1332545 0.0405567 87.26018 28.47792 2.255968
ACAD-004 NETN ACAD ACAD_MDI_East VS 1 4 25 102 2018-06-28 2018 4 FALSE O 0 7.666667 0 3 4.00 49.1 0.661 28.643 694.0 217.35 247.4 11.65 784.50 97.05 21.625 58.90 11.69 19.475 25.79318 0.5955504 43.33283 3.463074 0.5558824 2.035376 0.2642441 8.7231282 0.3475380 0.0787222 0.0357547 24.49708 13.42631 33.819510
ACAD-006 NETN ACAD ACAD_MDI_East VS 1 6 48 198 2014-06-30 2014 3 FALSE O 0 9.000000 0 3 3.67 98.3 2.024 53.725 2312.0 651.00 690.5 90.95 71.85 14.01 28.505 106.35 33.57 10.350 29.72048 21.6627236 26.54397 11.536926 1.6649616 5.680790 0.4771198 0.7989251 0.0501701 0.1037677 0.1026763 65.13958 38.81810 2.688130
ACAD-007 NETN ACAD ACAD_MDI_East VS 1 7 49 203 2014-06-23 2014 3 FALSE O 0 9.000000 0 3 3.71 95.5 1.208 53.008 2125.0 715.00 786.0 84.15 92.20 29.39 93.150 188.25 41.68 9.450 29.19126 15.5160087 43.88079 10.603792 1.8286445 6.466475 0.8445491 1.0252039 0.1052462 0.3390972 0.1274813 67.63484 36.32523 3.512024

joinSoilSampleData

Compiles soil sample data collected in the field.

View soil sample data for plots in ACAD from 2014 and later.

acad_soil <- joinSoilSampleData(park = "ACAD", from = 2014)
print_head(acad_soil)
Plot_Name Network ParkUnit ParkSubUnit PlotTypeCode PanelCode PlotCode PlotID EventID SampleYear SampleDate IsQAQC cycle num_samps Litter_cm O_Horizon_cm A_Horizon_cm Total_Depth_cm Lab_QC Field_misID_O Field_misID_A
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 3 2014 2014-07-14 FALSE 3 3 0.6666667 9.333333 0.000000 9.333333 TRUE 0 0
ACAD-002 NETN ACAD ACAD_Schoodic VS 1 2 9 35 2014 2014-07-14 FALSE 3 3 0.6666667 7.666667 0.000000 7.666667 TRUE 0 0
ACAD-003 NETN ACAD ACAD_Schoodic VS 1 3 24 98 2018 2018-07-02 FALSE 4 3 0.4333333 8.666667 0.000000 8.666667 TRUE 0 0
ACAD-004 NETN ACAD ACAD_MDI_East VS 1 4 25 102 2018 2018-06-28 FALSE 4 3 5.0000000 7.666667 0.000000 7.666667 TRUE 0 0
ACAD-005 NETN ACAD ACAD_MDI_East VS 1 5 33 138 2018 2018-06-25 FALSE 4 3 1.7666667 0.000000 7.833333 7.833333 TRUE 0 1
ACAD-006 NETN ACAD ACAD_MDI_East VS 1 6 48 198 2014 2014-06-30 FALSE 3 3 4.3333333 9.000000 0.000000 9.000000 TRUE 0 0

joinStandData

Compiles data collected at the stand level that may help identify groups or covariates for analyses or explain differences among plots.

View stand data for plots in SAGA from all years.

saga_stnd <- joinStandData(park = "SAGA")
print_head(saga_stnd[,c(1:26, 30:ncol(saga_stnd))]) # dropping notes fields
Plot_Name Network ParkUnit ParkSubUnit PlotTypeCode PanelCode PlotCode PlotID xCoordinate yCoordinate EventID SampleYear SampleDate cycle IsQAQC IsStuntedWoodland Stand_Structure Stand_Structure_Code Pct_Crown_Closure CrownClosureCode Txt_Crown_Closure Deer_Browse_Index Microtopography Earthworms Water_on_Plot_Code Water_on_Plot PlotSlope Pct_Understory_Low Txt_Understory_Low Pct_Understory_Mid Txt_Understory_Mid Pct_Understory_High Txt_Understory_High Pct_Bare_Soil Txt_Bare_Soil Pct_Bryophyte Txt_Bryophyte Pct_Lichen Txt_Lichen Pct_Rock Txt_Rock Pct_Trampled Txt_Trampled Pct_Water Txt_Water Avg_Height_Codom Avg_Height_Inter
SAGA-001 NETN SAGA SAGA VS 1 1 6 712527 4819562 21 2006 2006-08-01 1 FALSE FALSE Multi-aged 3 87.5 5 75-100% NA 1 0 0 None 9.0 15 5-25% 15 5-25% 85.0 75-95% 0 0% NA Not Collected NA Not Collected 0 0% 0 0% NA Not Collected 36.10000 NA
SAGA-001 NETN SAGA SAGA VS 1 1 6 712527 4819562 22 2010 2010-06-15 2 FALSE FALSE Multi-aged 3 87.5 5 75-100% 3 1 1 0 None 7.0 3 1-5% 0 0% 15.0 5-25% 0 0% 0 0% 0 0% 0 0% 0 0% NA Permanently Missing 40.10000 NA
SAGA-001 NETN SAGA SAGA VS 1 1 6 712527 4819562 23 2014 2014-06-09 3 FALSE FALSE Multi-aged 3 87.5 5 75-100% 3 1 1 0 None 8.1 15 5-25% 15 5-25% 62.5 50-75% 0 0% 0 0% 0 0% 0 0% 0 0% 0 0% 41.20000 32.26667
SAGA-001 NETN SAGA SAGA VS 1 1 6 712527 4819562 24 2018 2018-06-12 4 FALSE FALSE Multi-aged 3 87.5 5 75-100% 4 1 0 0 None 8.1 3 1-5% 3 1-5% 15.0 5-25% 0 0% 0 0% 0 0% 0 0% 0 0% 0 0% 23.76667 19.23333
SAGA-001 NETN SAGA SAGA VS 1 1 6 712527 4819562 1551 2023 2023-05-31 5 FALSE FALSE Multi-aged 3 87.5 5 75-100% 4 1 0 0 None 8.2 3 1-5% 3 1-5% 15.0 5-25% 0 0% 0 0% 0 0% 0 0% 0 0% 0 0% 23.16667 17.80000
SAGA-002 NETN SAGA SAGA VS 1 2 14 712290 4819882 53 2006 2006-08-02 1 FALSE FALSE Multi-aged 3 87.5 5 75-100% NA 1 0 0 None 33.0 15 5-25% 15 5-25% 37.5 25-50% 3 1-5% NA Not Collected NA Not Collected 0 0% 0 0% NA Not Collected 36.20000 NA

View stand data for plots in ACAD from most recent survey of plots.

acad_stnd4 <- joinStandData(park = "ACAD", from = 2023, to = 2026) 
print_head(acad_stnd4)
Plot_Name Network ParkUnit ParkSubUnit PlotTypeCode PanelCode PlotCode PlotID xCoordinate yCoordinate EventID SampleYear SampleDate cycle IsQAQC IsStuntedWoodland Stand_Structure Stand_Structure_Code Pct_Crown_Closure CrownClosureCode Txt_Crown_Closure Deer_Browse_Index Microtopography Earthworms Water_on_Plot_Code Water_on_Plot Weather_Photo PhotoNotes StandNotes PlotSlope Pct_Understory_Low Txt_Understory_Low Pct_Understory_Mid Txt_Understory_Mid Pct_Understory_High Txt_Understory_High Pct_Bare_Soil Txt_Bare_Soil Pct_Bryophyte Txt_Bryophyte Pct_Lichen Txt_Lichen Pct_Rock Txt_Rock Pct_Trampled Txt_Trampled Pct_Water Txt_Water Avg_Height_Codom Avg_Height_Inter
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 574066 4913328 1869 2026 2026-06-22 6 FALSE FALSE Multi-aged 3 37.5 3 25-50% 2 1 0 0 None Sun NA NA NA 62.5 50-75% 62.5 50-75% 37.5 25-50% 0 0% 97.5 95-100% 0 0% 0 0% 0 0% 0 0% 16.333333 NA
ACAD-002 NETN ACAD ACAD_Schoodic VS 1 2 9 575371 4911411 1870 2026 2026-06-22 6 FALSE FALSE Woodland (ACAD only) 6 37.5 3 25-50% 3 1 0 0 None Clouds NA NA NA 85.0 75-95% 62.5 50-75% 37.5 25-50% 0 0% 85.0 75-95% 3 1-5% 0 0% 0 0% 0 0% 7.550000 6.266667
ACAD-003 NETN ACAD ACAD_Schoodic VS 1 3 24 574969 4909331 1878 2026 2026-06-21 6 FALSE TRUE Woodland (ACAD only) 6 37.5 3 25-50% 3 1 0 0 None Sun NA NA NA 62.5 50-75% 62.5 50-75% 37.5 25-50% 0 0% 15.0 5-25% 15 5-25% 0 0% 0 0% 0 0% 5.766667 4.566667
ACAD-004 NETN ACAD ACAD_MDI_East VS 1 4 25 556272 4914012 1853 2026 2026-06-15 6 FALSE FALSE Multi-aged 3 87.5 5 75-100% 4 1 0 0 None Rain NA NA NA 3.0 1-5% 0.0 0% 3.0 1-5% 0 0% 3.0 1-5% 0 0% 0 0% 0 0% 0 0% 21.033333 16.033333
ACAD-005 NETN ACAD ACAD_MDI_East VS 1 5 33 563669 4911926 1861 2026 2026-06-14 6 FALSE FALSE Multi-aged 3 87.5 5 75-100% 4 1 1 0 None Rain NA NA NA 15.0 5-25% 15.0 5-25% 62.5 50-75% 3 1-5% 15.0 5-25% 0 0% 15 5-25% 0 0% 0 0% 12.200000 9.066667
ACAD-006 NETN ACAD ACAD_MDI_East VS 1 6 48 556874 4909854 1892 2026 2026-07-05 6 FALSE TRUE Woodland (ACAD only) 6 62.5 4 50-75% 3 1 0 0 None Sun NA Deer browse is quite common on the edges of the plot. We were considering a 4, but browse has not extended to browse NP species yet. NA 15.0 5-25% 15.0 5-25% 62.5 50-75% 0 0% 3.0 1-5% 0 0% 3 1-5% 0 0% 0 0% 8.400000 7.133333

joinStandDisturbance

Compiles major disturbances recorded on a plot, and that only occurred within the last 4 years of sampling.

View stand disturbances recorded for plots in ACAD from all years.

acad_stnd <- joinStandDisturbance(park = "ACAD")
print_head(acad_stnd)
Plot_Name Network ParkUnit ParkSubUnit PlotTypeCode PanelCode PlotCode PlotID EventID SampleYear SampleDate cycle IsQAQC DisturbanceCode DisturbanceSummary ThresholdCode ThresholdLabel DisturbanceCoverClassCode DisturbanceCoverClassLabel DisturbanceNote
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1 2006 2006-06-06 1 FALSE 0 None NA Not Applicable NA Not Applicable NA
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 2 2010 2010-07-27 2 FALSE 0 None NA Not Applicable NA Not Applicable NA
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 3 2014 2014-07-14 3 FALSE 0 None NA Not Applicable NA Not Applicable NA
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 4 2018 2018-07-02 4 FALSE 0 None NA Not Applicable NA Not Applicable NA
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1517 2022 2022-07-14 5 FALSE 0 None NA Not Applicable NA Not Applicable NA
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 2026 2026-06-22 6 FALSE 0 None NA Not Applicable NA Not Applicable NA

View stand disturbances for plots in ACAD from most recent survey of plots.

acad_stnd4 <- joinStandDisturbance(park = "ACAD", from = 2023, to = 2026) 
print_head(acad_stnd4)
Plot_Name Network ParkUnit ParkSubUnit PlotTypeCode PanelCode PlotCode PlotID EventID SampleYear SampleDate cycle IsQAQC DisturbanceCode DisturbanceSummary ThresholdCode ThresholdLabel DisturbanceCoverClassCode DisturbanceCoverClassLabel DisturbanceNote
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 2026 2026-06-22 6 FALSE 0 None NA Not Applicable NA Not Applicable NA
ACAD-002 NETN ACAD ACAD_Schoodic VS 1 2 9 1870 2026 2026-06-22 6 FALSE 0 None NA Not Applicable NA Not Applicable NA
ACAD-003 NETN ACAD ACAD_Schoodic VS 1 3 24 1878 2026 2026-06-21 6 FALSE 0 None NA Not Applicable NA Not Applicable NA
ACAD-004 NETN ACAD ACAD_MDI_East VS 1 4 25 1853 2026 2026-06-15 6 FALSE 0 None NA Not Applicable NA Not Applicable NA
ACAD-005 NETN ACAD ACAD_MDI_East VS 1 5 33 1861 2026 2026-06-14 6 FALSE 0 None NA Not Applicable NA Not Applicable NA
ACAD-006 NETN ACAD ACAD_MDI_East VS 1 6 48 1892 2026 2026-07-05 6 FALSE 0 None NA Not Applicable NA Not Applicable NA

joinTreeData

Compiles live and dead standing tree data for trees >=10cm tall.

Join all tree data from all surveys of plots in ACAD.

acad_live <- joinTreeData(park = "ACAD")

Join live tree data from the most recent survey of plots in ACAD.

acad_live <- joinTreeData(park = "ACAD", status = 'live', from = 2023, to = 2026) 
print_head(acad_live)
Plot_Name Network ParkUnit ParkSubUnit PlotTypeCode PanelCode PlotCode PlotID EventID IsQAQC SampleYear SampleDate cycle TSN ScientificName TagCode Fork Azimuth Distance DBHcm IsDBHVerified TreeStatusCode CrownClassCode DecayClassCode Pct_Tot_Foliage_Cond HWACode BBDCode BA_cm2 num_stems TreeEventNote
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 6 18034 Picea rubens 3 NA 251 7.3 19.3 FALSE AS 3 NA 30.0 NA NA 292.5530 1 NA
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 6 18034 Picea rubens 6 NA 280 5.6 20.5 FALSE AS 3 NA 5.5 NA NA 330.0636 1 NA
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 6 18034 Picea rubens 14 NA 1 5.2 22.2 FALSE AS 3 NA 5.5 NA NA 387.0756 1 NA
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 6 18034 Picea rubens 18 NA 44 5.7 25.6 FALSE AS 3 NA 5.5 NA NA 514.7185 1 NA
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 6 18034 Picea rubens 21 NA 109 9.0 32.0 FALSE AS 3 NA 5.5 NA NA 804.2477 1 NA
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 6 18034 Picea rubens 29 NA 194 5.8 26.3 FALSE AS 3 NA 5.5 NA NA 543.2521 1 NA

Join dead tree data from the most recent survey of plots in ACAD.

acad_dead <- joinTreeData(park = "ACAD", status = 'dead', from = 2023, to = 2026) 

print_head(acad_dead)
Plot_Name Network ParkUnit ParkSubUnit PlotTypeCode PanelCode PlotCode PlotID EventID IsQAQC SampleYear SampleDate cycle TSN ScientificName TagCode Fork Azimuth Distance DBHcm IsDBHVerified TreeStatusCode CrownClassCode DecayClassCode Pct_Tot_Foliage_Cond HWACode BBDCode BA_cm2 num_stems TreeEventNote
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 6 18034 Picea rubens 2 NA 240 6.6 13.5 FALSE DS NA 2 NA NA NA 143.1388 1 NA
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 6 18034 Picea rubens 7 NA 291 7.1 11.6 FALSE DB NA 3 NA NA NA 105.6832 1 NA
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 6 18034 Picea rubens 8 NA 298 5.2 NA NA DF NA NA NA NA NA NA 1 NA
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 6 18034 Picea rubens 11 NA 336 5.3 28.2 TRUE DS NA 1 NA NA NA 624.5800 1 NA
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 6 18034 Picea rubens 12 NA 22 1.1 24.5 FALSE DS NA 1 NA NA NA 471.4352 1 NA
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 6 18034 Picea rubens 13 NA 2 3.6 15.6 TRUE DS NA 2 NA NA NA 191.1345 1 NA

joinTreeConditions

Compiles tree conditions for live and dead standing trees. Only presence of cavities is recorded for dead trees.

Join tree condition data from the most recent survey of plots in ACAD.

acad_cond <- joinTreeConditions(park = "ACAD", from = 2023, to = 2026) 
print_head(acad_cond)
Plot_Name Network ParkUnit ParkSubUnit PlotTypeCode PanelCode PlotCode PlotID EventID IsQAQC SampleYear SampleDate cycle TSN ScientificName TagCode TreeStatusCode BBDCode HWACode num_cond H NO AD ALB BBD BLD BC BWA CAVL CAVS CW DBT DOG EAB EB EHS G GM HWA ID OTH RPS SB SLF SOD SPB SW VIN_B VIN_C
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 6 18034 Picea rubens 2 DS NA NA 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 6 18034 Picea rubens 3 AS NA NA 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 6 18034 Picea rubens 6 AS NA NA 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 6 18034 Picea rubens 7 DB NA NA 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 6 18034 Picea rubens 8 DF NA NA 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 6 18034 Picea rubens 11 DS NA NA 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

Join tree condition data for live trees only from the most recent survey of plots in ACAD.

acad_lcond <- joinTreeConditions(park = "ACAD", status = 'live', from = 2023, to = 2026) 
print_head(acad_lcond)
Plot_Name Network ParkUnit ParkSubUnit PlotTypeCode PanelCode PlotCode PlotID EventID IsQAQC SampleYear SampleDate cycle TSN ScientificName TagCode TreeStatusCode BBDCode HWACode num_cond H AD ALB BBD BLD BC BWA CAVL CAVS CW DBT DOG EAB EB EHS G GM HWA ID OTH RPS SB SLF SOD SPB SW VIN_B VIN_C
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 6 18034 Picea rubens 3 AS NA NA 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 6 18034 Picea rubens 6 AS NA NA 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 6 18034 Picea rubens 14 AS NA NA 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 6 18034 Picea rubens 18 AS NA NA 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 6 18034 Picea rubens 21 AS NA NA 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 6 18034 Picea rubens 29 AS NA NA 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

joinTreeFoliageCond

Compiles foliage conditions for live trees.

Join tree foliage condition data from the most recent survey of plots in ACAD.

acad_fcond <- joinTreeFoliageCond(park = "ACAD", from = 2023, to = 2026) 
print_head(acad_fcond)
Plot_Name Network ParkUnit ParkSubUnit PlotTypeCode PanelCode PlotCode PlotID EventID IsQAQC SampleYear SampleDate TSN ScientificName TagCode Pct_Tot_Foliage_Cond Txt_Tot_Foliage_Cond Pct_Leaves_Aff_C Pct_Leaves_Aff_H Pct_Leaves_Aff_L Pct_Leaves_Aff_N Pct_Leaves_Aff_S Pct_Leaves_Aff_W Pct_Leaves_Aff_O Pct_Leaf_Area_C Pct_Leaf_Area_H Pct_Leaf_Area_N
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 18034 Picea rubens 3 30.0 10-50% 0 0 30.0 0.0 0 0 0 0 0 0
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 18034 Picea rubens 6 5.5 1-10% 0 0 5.5 5.5 0 0 0 0 0 95
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 18034 Picea rubens 14 5.5 1-10% 0 0 5.5 5.5 0 0 0 0 0 95
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 18034 Picea rubens 18 5.5 1-10% 0 0 5.5 0.0 0 0 0 0 0 0
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 18034 Picea rubens 21 5.5 1-10% 0 0 5.5 0.0 0 0 0 0 0 0
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 18034 Picea rubens 29 5.5 1-10% 0 0 5.5 0.0 0 0 0 0 0 0

joinTreeNotes

Compiles all notes recorded for trees.

Join tree notes from all visits to plots in ACAD.

acad_notes <- joinTreeNotes(park = "ACAD") 

print_head(acad_notes)
Plot_Name PlotID EventID Network ParkUnit ParkSubUnit SampleDate SampleYear IsQAQC Note_Type Sample_Info Notes
ACAD-001 1 1 NETN ACAD ACAD_Schoodic 2006-06-06 2006 FALSE Tree_Notes Tree Tag: 9 tree note: date unknown: no tag, near tree #8, no tag, near tree #8
ACAD-001 1 1 NETN ACAD ACAD_Schoodic 2006-06-06 2006 FALSE Tree_Notes Tree Tag: 10 tree note: date unknown: not tagged
ACAD-001 1 1 NETN ACAD ACAD_Schoodic 2006-06-06 2006 FALSE Tree_Notes Tree Tag: 11 foliage brown
ACAD-001 1 1 NETN ACAD ACAD_Schoodic 2006-06-06 2006 FALSE Tree_Notes Tree Tag: 21 some needle loss
ACAD-001 1 1 NETN ACAD ACAD_Schoodic 2006-06-06 2006 FALSE Tree_Notes Tree Tag: 8 wounds on bark, brown needles
ACAD-001 1 1 NETN ACAD ACAD_Schoodic 2006-06-06 2006 FALSE Tree_Notes Tree Tag: 26 tree note: date unknown: 20190131 KMM: XP in following cycle, so updated status here., outside of plot

joinVisitNotes

Compiles all notes recorded for a given visit, including microplot, quadrat and tree notes.

Join visits notes from all plots in ACAD.

acad_vn <- joinVisitNotes(park = "ACAD") 

print_head(acad_vn)
Plot_Name PlotID EventID Network ParkUnit ParkSubUnit SampleYear SampleDate IsQAQC cycle Note_Type Sample_Info Notes
ACAD-001 1 1 NETN ACAD ACAD_Schoodic 2006 2006-06-06 FALSE 1 Soil_Event NA
  1. Humus measurement in forest floor depth
  2. Sample taken from right edge of plot. CWD covered original sample location.
ACAD-001 1 1 NETN ACAD ACAD_Schoodic 2006 2006-06-06 FALSE 1 Stand_Notes NA Mosaic between two-storied and multi. High water table. No Stand Height data recorded; Akozlowski Feb 2010.
ACAD-001 1 1 NETN ACAD ACAD_Schoodic 2006 2006-06-06 FALSE 1 Tree_Notes Tree Tag: 1 tree note: date unknown: no crown class, did not ta, near plot center., no crown class, did not tag, near plot center.
ACAD-001 1 1 NETN ACAD ACAD_Schoodic 2006 2006-06-06 FALSE 1 Tree_Notes Tree Tag: 10 tree note: date unknown: not tagged
ACAD-001 1 1 NETN ACAD ACAD_Schoodic 2006 2006-06-06 FALSE 1 Tree_Notes Tree Tag: 11 foliage brown
ACAD-001 1 1 NETN ACAD ACAD_Schoodic 2006 2006-06-06 FALSE 1 Tree_Notes Tree Tag: 17 tree note: date unknown: 20190131 KMM: XP in following cycle, so updated status here., outside of plot; 20210108 ces: Tree distance recorded was out of plot (10.9), changed to 10.7. Confirm that tree is in the plot at next visit.

Plot Functions

plotTreeGrowth

This function plots individual tree growth over time for all trees that were alive on their first record in the plot. Trees that started out as dead are not plotted. Each line on a graph represents the DBH of a live tree up until the first time it is classified as dead. Lines are color coded based on growth between visits to indicate shrinkage, slowing of growth, and/or fast growth. Each tick or X on the figure is a sample event for a given tree.

Make plot of red spruce for plots on Schoodic in panel 1

plotTreeGrowth(park = "ACAD", subunit = "Schoodic", panels = 1, species = "Picea rubens")

Plot tree growth for Eastern MDI and balsam fir on plots with elevated mortality

plotTreeGrowth(park = "ACAD", subunit = "MDI_East", species = "Abies balsamea", elev_mort = TRUE)

Plot growth for specific plots

plotTreeGrowth(plotName = c("ACAD-035", "ACAD-046"))

Plot beech for MORR with vertical line where BLD was detected

 plotTreeGrowth(park = "MORR", from = 2006, to = 2026, species = "Fagus grandifolia", panels = 4) +
   ggplot2::geom_vline(xintercept = 2019, lty = 'dashed')

Plot multiple species of oaks in MORR

plotTreeGrowth(park = "MORR", from = 2006, to = 2026,
   species = c("Quercus rubra", "Quercus velutina", "Quercus alba", "Quercus montana"))

Plot hemlock in ROVA without plot title

plotTreeGrowth(park = "ROVA", species = "Tsuga canadensis", title = F)

Plot ash in SARA

plotTreeGrowth(park = "SARA",
  species = c("Fraxinus americana", "Fraxinus pennsylvanica", "Fraxinus nigra"))

View plots with elevated mortality in SAGA

plotTreeGrowth(park = "SAGA", elev_mort = T)

View MORR plots with elevated mortality not from windthrow

plotTreeGrowth(park = "MORR", elev_mort = T, exc_wind = T)

plotTreeMap

This function converts tree distance and azimuth values to coordinates and plots the coordinates of live, dead, or excluded trees. Trees are color coded by status, and size is relative to DBH. Note that if multiple visits for a given plot are included in the function argument, only the most recent visit will be plotted. Therefore this function is best used on 1 to 4 year periods. Note that QA/QC events are not plotted with this function. Excluded trees are plotted with 10 cm DBH assigned, as these don’t get a DBH measurement when excluded.

Make map for single plot

plotTreeMap(park = "ACAD", from = 2026, to = 2026, plotName = "ACAD-001")

Make map for panel 2 in WEFA

plotTreeMap(park = "WEFA", from = 2022, to = 2025, panels = 2)
## [[1]]

## 
## [[2]]

## 
## [[3]]

## 
## [[4]]

## 
## [[5]]

Save pdfs for maps in panel 1 in most recent visit

plotTreeMap(from = 2022, to = 2026, panels = 1, output_to = "file", path = "./data/")

theme_FHM

This function customizes a theme for plotting NETN forest data, including removing the default panel grids from ggplot2 figures.

Using function in an example ggplot object

dbh_dist <- sumTreeDBHDist(park = "ACAD", status = "live", from = 2023, to = 2026) |>
            tidyr::pivot_longer(cols = starts_with("dens"), names_to = "size_class", values_to = "density") |>
            dplyr::arrange(Plot_Name, SampleYear, size_class)

ggplot(dbh_dist, aes(x = size_class, y = density)) +
       geom_bar(stat = 'identity', fill = 'dimgrey', position = position_dodge()) +
       labs(x='Live tree DBH size classes (cm)', y='stems/ha') +
       scale_x_discrete(labels=c('10 - 19.9', '20 - 29.9', '30 - 39.9', '40 - 49.9','50 - 59.9',
                                 '60 - 69.9', '70 - 79.9', '80 - 89.9', '90 - 99.9', '100+')) +
       theme(axis.text.x = element_text(angle = 90, vjust = 0.5)) +
       theme_FHM()

Sum functions

sumQuadGuilds

This function summarizes output from joinQuadData and calculates average cover and quadrat frequency for each guild. Average cover is corrected for number of quadrats sampled. Guilds are tree, shrub, forb, fern, and graminoid. If herbaceous guild is split, then cover of ferns does not overlap with cover of herbaceous. If herbaceous guild is not split, then cover of herbaceous guild includes fern and other herbaceous (but not graminoid) species cover. Only works for complete events, but does include plots where a few quadrats were not sampled. Germinants are not included in summary.

Compile invasive quad data for all parks and most recent survey. Keep ferns in with herbs

inv_guilds <- sumQuadGuilds(speciesType = 'invasive', from = 2023, to = 2026, splitHerb = FALSE)
print_head(inv_guilds)
Plot_Name Network ParkUnit ParkSubUnit PlotID EventID IsQAQC SampleYear SampleDate cycle Group quad_pct_cover quad_pct_freq
ACAD-044 NETN ACAD ACAD_MDI_East 220 1602 FALSE 2023 2023-06-27 5 Tree 0.0000 0.0
ACAD-044 NETN ACAD ACAD_MDI_East 220 1602 FALSE 2023 2023-06-27 5 Shrub 0.1875 12.5
ACAD-044 NETN ACAD ACAD_MDI_East 220 1602 FALSE 2023 2023-06-27 5 Herbaceous 0.0000 0.0
ACAD-044 NETN ACAD ACAD_MDI_East 220 1602 FALSE 2023 2023-06-27 5 Graminoid 0.0000 0.0
ACAD-082 NETN ACAD ACAD_MDI_East 258 1669 FALSE 2024 2024-06-20 5 Tree 0.0000 0.0
ACAD-082 NETN ACAD ACAD_MDI_East 258 1669 FALSE 2024 2024-06-20 5 Shrub 0.0125 12.5

Compile native quad data for more recent survey in ACAD, with ferns and forbs split in separate guilds

ACAD_guilds <- sumQuadGuilds(speciesType = 'native', from = 2023, to = 2026, splitHerb = TRUE)
print_head(ACAD_guilds)
Plot_Name Network ParkUnit ParkSubUnit PlotID EventID IsQAQC SampleYear SampleDate cycle Group quad_pct_cover quad_pct_freq
ACAD-001 NETN ACAD ACAD_Schoodic 1 1869 FALSE 2026 2026-06-22 6 Tree 47.0875 100.0
ACAD-001 NETN ACAD ACAD_Schoodic 1 1869 FALSE 2026 2026-06-22 6 Shrub 0.1875 12.5
ACAD-001 NETN ACAD ACAD_Schoodic 1 1869 FALSE 2026 2026-06-22 6 Herbaceous 0.4375 12.5
ACAD-001 NETN ACAD ACAD_Schoodic 1 1869 FALSE 2026 2026-06-22 6 Graminoid 4.7000 25.0
ACAD-001 NETN ACAD ACAD_Schoodic 1 1869 FALSE 2026 2026-06-22 6 Fern 0.0000 0.0
ACAD-002 NETN ACAD ACAD_Schoodic 9 1870 FALSE 2026 2026-06-22 6 Tree 17.9125 100.0

sumSpeciesList

This function summarizes all species data collected in a plot visit, including live trees, microplots, quadrats, and additional species lists.

Compile number of invasive species found per plot from 2023 to 2026 for all parks.

inv_spp <- sumSpeciesList(speciesType = "invasive", from = 2023, to = 2026)
print_head(inv_spp)
Plot_Name Network ParkUnit ParkSubUnit PlotTypeCode PanelCode PlotCode PlotID EventID SampleYear SampleDate cycle IsQAQC TSN ScientificName BA_cm2 DBH_mean tree_stems seed_den sap_den stock shrub_avg_cov shrub_pct_freq quad_avg_cov quad_pct_freq addspp_present
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 2026 2026-06-22 6 FALSE NA None present 0 0 0 0 0 0 0 0 0 0 0
ACAD-002 NETN ACAD ACAD_Schoodic VS 1 2 9 1870 2026 2026-06-22 6 FALSE NA None present 0 0 0 0 0 0 0 0 0 0 0
ACAD-003 NETN ACAD ACAD_Schoodic VS 1 3 24 1878 2026 2026-06-21 6 FALSE NA None present 0 0 0 0 0 0 0 0 0 0 0
ACAD-004 NETN ACAD ACAD_MDI_East VS 1 4 25 1853 2026 2026-06-15 6 FALSE NA None present 0 0 0 0 0 0 0 0 0 0 0
ACAD-005 NETN ACAD ACAD_MDI_East VS 1 5 33 1861 2026 2026-06-14 6 FALSE 28579 Rhamnus frangula 0 0 0 0 0 0 0 0 0 0 1
ACAD-006 NETN ACAD ACAD_MDI_East VS 1 6 48 1892 2026 2026-07-05 6 FALSE NA None present 0 0 0 0 0 0 0 0 0 0 0

Compile species list for plots sampled in SARA in 2022

SARA_spp <- sumSpeciesList(park = 'SARA', from = 2022)
print_head(SARA_spp)
Plot_Name Network ParkUnit ParkSubUnit PlotTypeCode PanelCode PlotCode PlotID EventID SampleYear SampleDate cycle IsQAQC TSN ScientificName BA_cm2 DBH_mean tree_stems seed_den sap_den stock shrub_avg_cov shrub_pct_freq quad_avg_cov quad_pct_freq addspp_present
SARA-001 NETN SARA SARA VS 1 1 7 1531 2023 2023-05-21 5 FALSE 28728 Acer rubrum 0 0 0 4 0 4 0 0 0.0625 62.5 0
SARA-001 NETN SARA SARA VS 1 1 7 1531 2023 2023-05-21 5 FALSE 25092 Agrimonia 0 0 0 0 0 0 0 0 0.0125 12.5 0
SARA-001 NETN SARA SARA VS 1 1 7 1531 2023 2023-05-21 5 FALSE 25098 Agrimonia parviflora 0 0 0 0 0 0 0 0 0.1875 12.5 0
SARA-001 NETN SARA SARA VS 1 1 7 1531 2023 2023-05-21 5 FALSE 184481 Alliaria petiolata 0 0 0 0 0 0 0 0 0.4375 12.5 0
SARA-001 NETN SARA SARA VS 1 1 7 1531 2023 2023-05-21 5 FALSE 25108 Amelanchier 0 0 0 0 0 0 0 0 0.0000 0.0 1
SARA-001 NETN SARA SARA VS 1 1 7 1531 2023 2023-05-21 5 FALSE 182067 Amphicarpaea bracteata 0 0 0 0 0 0 0 0 0.4750 50.0 0

sumStrStage

This function calculates structural stage metric from Ecological Integrity Scorecard, which assigns Pole, Mature, Late Successional, or Mosaic (i.e., none of the above) to each plot based on the percent of live basal area of canopy trees in pole, mature and large size classes. Plots must be closed-canopy forest to be classified for this metric. Therefore plots classified as Woodlands (ACAD only) or Early successional (SARA only) in the field are automatically assigned those classes in the calculation.

Summarize structural stage for all parks all years

strstg <- sumStrStage()
print_head(strstg)
Plot_Name Network ParkUnit ParkSubUnit PlotTypeCode PanelCode PlotCode PlotID EventID IsQAQC SampleYear SampleDate cycle BA_tot pctBA_pole pctBA_mature pctBA_large Stand_Structure Stage
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1 FALSE 2006 2006-06-06 1 7313.628 33.013208 66.98679 0 Mosaic Mature
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 2 FALSE 2010 2010-07-27 2 6012.521 26.439576 73.56042 0 Multi-aged Mature
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 3 FALSE 2014 2014-07-14 3 5845.271 21.722071 78.27793 0 Multi-aged Mature
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 4 FALSE 2018 2018-07-02 4 5800.629 18.723623 81.27638 0 Multi-aged Mature
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1517 FALSE 2022 2022-07-14 5 5392.253 11.081576 88.91842 0 Multi-aged Mature
ACAD-001 NETN ACAD ACAD_Schoodic VS 1 1 1 1869 FALSE 2026 2026-06-22 6 4037.127 7.246564 92.75344 0 Multi-aged Mature

Summarize structural stage for MIMA from 2023 to 2026

strstg_mima <- sumStrStage(park = "MIMA", from = 2023, to = 2026)
print_head(strstg_mima)
Plot_Name Network ParkUnit ParkSubUnit PlotTypeCode PanelCode PlotCode PlotID EventID IsQAQC SampleYear SampleDate cycle BA_tot pctBA_pole pctBA_mature pctBA_large Stand_Structure Stage
MIMA-001 NETN MIMA MIMA_Battle_Road VS 1 1 3 1571 FALSE 2023 2023-06-12 5 14861.603 0.000000 0.00000 100.00000 Mosaic Late_successional
MIMA-002 NETN MIMA MIMA_Battle_Road VS 1 2 11 1572 FALSE 2023 2023-06-12 5 12909.959 15.530431 65.73037 18.73920 Multi-aged Mature
MIMA-003 NETN MIMA MIMA_Battle_Road VS 1 3 18 1575 FALSE 2023 2023-06-12 5 8469.498 23.865555 76.13444 0.00000 Multi-aged Mature
MIMA-004 NETN MIMA MIMA_Battle_Road VS 1 4 27 1576 FALSE 2023 2023-06-12 5 8986.542 0.000000 55.07008 44.92992 Multi-aged Mosaic
MIMA-005 NETN MIMA MIMA_Battle_Road VS 1 5 35 1577 FALSE 2023 2023-06-12 5 5669.609 58.463006 41.53699 0.00000 Multi-aged Pole
MIMA-006 NETN MIMA MIMA_Battle_Road VS 1 6 42 1578 FALSE 2023 2023-06-13 5 23385.717 7.098895 33.84601 59.05509 Multi-aged Late_successional

sumSapDBHDist

This function calculates DBH distribution of live saplings by 1cm size classes.

Summarize DBH distribution for all saplings in MORR for all cycles

sap_dist_morr <- sumSapDBHDist(park = "MORR")
print_head(sap_dist_morr)
Plot_Name ParkUnit ParkSubUnit PlotID EventID SampleYear IsQAQC cycle dens_1_1.9 dens_2_2.9 dens_3_3.9 dens_4_4.9 dens_5_5.9 dens_6_6.9 dens_7_7.9 dens_8_8.9 dens_9_9.9
MORR-001 MORR MORR_NJ_Brigade 4 13 2007 FALSE 1 0 0 0 0 0 0 0 0 0.0000
MORR-001 MORR MORR_NJ_Brigade 4 14 2011 FALSE 2 0 0 0 0 0 0 0 0 0.0000
MORR-001 MORR MORR_NJ_Brigade 4 15 2015 FALSE 3 0 0 0 0 0 0 0 0 0.0000
MORR-001 MORR MORR_NJ_Brigade 4 16 2019 FALSE 4 0 0 0 0 0 0 0 0 0.0000
MORR-001 MORR MORR_NJ_Brigade 4 1627 2024 FALSE 5 0 0 0 0 0 0 0 0 0.0000
MORR-002 MORR MORR_NJ_Brigade 12 45 2007 FALSE 1 0 0 0 0 0 0 0 0 265.2582

Summarize DBH distribution for native saplings in ROVA from 2023 to 2026

sap_diam_dist <- sumSapDBHDist(park = 'ROVA', speciesType = 'native', from = 2023, to = 2026)
print_head(sap_diam_dist)
Plot_Name ParkUnit ParkSubUnit PlotID EventID SampleYear IsQAQC cycle dens_1_1.9 dens_2_2.9 dens_3_3.9 dens_4_4.9 dens_5_5.9 dens_6_6.9 dens_7_7.9 dens_8_8.9 dens_9_9.9
ROVA-001 ROVA ROVA_HOFR_West 5 1653 2024 FALSE 5 0.0000 0.0000 0.0000 0 265.2582 0 0 0 0
ROVA-002 ROVA ROVA_HOFR_West 13 1654 2024 FALSE 5 0.0000 0.0000 0.0000 0 0.0000 0 0 0 0
ROVA-003 ROVA ROVA_HOFR_West 20 1642 2024 FALSE 5 0.0000 0.0000 265.2582 0 0.0000 0 0 0 0
ROVA-004 ROVA ROVA_HOFR_West 29 1643 2024 FALSE 5 265.2582 0.0000 0.0000 0 0.0000 0 0 0 0
ROVA-005 ROVA ROVA_HOFR_East 37 1655 2024 FALSE 5 0.0000 0.0000 0.0000 0 0.0000 0 0 0 0
ROVA-006 ROVA ROVA_HOFR_East 44 1644 2024 FALSE 5 265.2582 265.2582 0.0000 0 0.0000 0 0 0 0

sumTreeDBHDist

This function calculates DBH distribution by 10cm size classes.

Summarize DBH distribution for all trees >= 10cm DBH in MORR for all cycles

tree_dist_morr <- sumTreeDBHDist(park = "MORR")
print_head(tree_dist_morr)
Plot_Name ParkUnit ParkSubUnit PlotID EventID SampleYear IsQAQC cycle dens_10_19.9 dens_20_29.9 dens_30_39.9 dens_40_49.9 dens_50_59.9 dens_60_69.9 dens_70_79.9 dens_80_89.9 dens_90_99.9 dens_100p
MORR-001 MORR MORR_NJ_Brigade 4 13 2007 FALSE 1 125 100 25 50 50 0 0 0 0 0
MORR-001 MORR MORR_NJ_Brigade 4 14 2011 FALSE 2 100 100 0 50 50 0 0 0 0 0
MORR-001 MORR MORR_NJ_Brigade 4 15 2015 FALSE 3 100 100 0 50 50 0 0 0 0 0
MORR-001 MORR MORR_NJ_Brigade 4 16 2019 FALSE 4 75 100 0 50 50 0 0 0 0 0
MORR-001 MORR MORR_NJ_Brigade 4 1627 2024 FALSE 5 50 75 0 50 25 25 0 0 0 0
MORR-002 MORR MORR_NJ_Brigade 12 45 2007 FALSE 1 75 100 50 0 0 0 0 0 0 0

Summarize DBH distribution for native trees in ROVA from 2023 to 2026 using basal area

tree_diam_BA <- sumTreeDBHDist(park = 'ROVA', speciesType = 'native', from = 2023, to = 2026, units = 'BA')
print_head(tree_diam_BA)
Plot_Name ParkUnit ParkSubUnit PlotID EventID SampleYear IsQAQC cycle BA_10_19.9 BA_20_29.9 BA_30_39.9 BA_40_49.9 BA_50_59.9 BA_60_69.9 BA_70_79.9 BA_80_89.9 BA_90_99.9 BA_100p
ROVA-001 ROVA ROVA_HOFR_West 5 1653 2024 FALSE 5 2.021575 3.752220 3.110255 8.035251 5.047145 0.000000 0.0000 0.00000 0 0
ROVA-002 ROVA ROVA_HOFR_West 13 1654 2024 FALSE 5 0.000000 0.000000 2.125307 3.580021 5.007404 0.000000 0.0000 0.00000 0 0
ROVA-003 ROVA ROVA_HOFR_West 20 1642 2024 FALSE 5 2.033985 4.689220 2.086724 10.667553 0.000000 0.000000 11.9153 14.58963 0 0
ROVA-004 ROVA ROVA_HOFR_West 29 1643 2024 FALSE 5 4.125049 4.806990 0.000000 0.000000 22.300949 8.321313 0.0000 0.00000 0 0
ROVA-005 ROVA ROVA_HOFR_East 37 1655 2024 FALSE 5 2.293264 2.805128 1.802666 4.411503 0.000000 0.000000 0.0000 0.00000 0 0
ROVA-006 ROVA ROVA_HOFR_East 44 1644 2024 FALSE 5 2.336933 2.917342 2.112407 3.940814 11.202801 8.814131 0.0000 13.33166 0 0