Soil morphology, observed properties, and geomorphic context represent a complex package of interrelated information that can be difficult to analyze and communicate as a whole. Graphical methods such as soil profile sketches and cross-sections represent a few of the possible methods commonly used to report on these kind of data. The Algorithms for Quantitative Pedology (AQP) project encompasses several related R packages tailored to this style of work. A specialized data structure (SoilProfileCollection) maintains linkages between soil horizons, diagnostic features, above-ground data, and geomorphic context. SoilProfileCollection objects can be filtered, subset, resampled (over new depth intervals), and re-ordered; all while preserving links to above and below-ground, linked data. Functions are provided for the conversion of soil colors to and from Munsell notation and several other color space coordinates. Graphical methods for the SoilProfileCollection provide a simple but flexible framework for the design and layout of soil profile sketches, aligned to x and or y axes defined by linked data.
Related Tutorials by Topic
Function Index by Topic
SoilProfileCollection Objects
Creation
-
depths()
: init an SPC fromdata.frame
-
site()
: set or add site-level attributes of an SPC
-
quickSPC()
: quickly build an SPC from simple text templates -
random_profile()
: generate random SPC from suite of depth functions
Metadata
-
hzdesgnname()
: get/set column containing horizon designations -
hzDesgn()
: get vector of horizon designations -
hztexclname()
: get/set column containing horizon texture class -
metadata()
: get/set SPC metadata (list) -
hzID()
: get vector of horizon IDs -
hzidname()
: get/set column containing horizon IDs -
horizonDepths()
get/set columns containing horizon top and bottom depths
Properties
-
length()
: number of profiles in a SPC -
nrow()
: number of horizons in a SPC -
names()
: list of horizon and site names -
siteNames()
: site-level column names -
horizonNames()
: horizon-level column names
Subset
-
glom()
: extract horizons based on overlap criteria defined by point or interval -
trunc()
: truncate SPC to given depth interval -
subset()
: subset profiles based on logical expressions -
subsetHz()
: subset horizons based on logical expressions -
[
:data.frame
-like subsetting of profiles (i-index) and/or horizons (j-index) -
[[
: access site or horizon-level columns by name -
k-index expressions
:.FIRST
,.LAST
,.HZID
,.NHZ
Depth
-
min()
: minimum bottom depth within a SPC -
max()
: maximum bottom depth within a SPC -
depthOf()
: generalized “depth to” based on REGEX matching -
minDepthOf()
: special case ofdepthOf()
-
maxDepthOf()
: special case ofdepthOf()
-
getSoilDepthClass()
: estimate soil depth based on REGEX matching applied to horizon designation and associated depth class -
aggregateSoilDepth()
: statistical estimation of soil depth (REGEX matching of horizon designation) within groups of profiles
Utility
-
combine()
,c()
: combine multiple SPCs into a single SPC -
duplicate()
: duplicate profiles within a SPC -
perturb()
: randomly adjust horizon thickness or depths to simulate from a template SPC -
warpHorizons()
: expand / contract horizon thickness -
harmonize()
: create new profiles within a SPC based sets of related horizon-level data -
hzAbove()
,hzBelow()
: locate horizons above or below some criteria -
unique()
: determine uniqueness among profiles of an SPC via MD5 hash -
split()
: split SPC into list of SPCs based on grouping factor -
site()
: get site data asdata.frame
-
horizons()
: get horizon data asdata.frame
-
replaceHorizons()
: replace horizon data -
diagnostic_hz()
: get/set diagnostic features -
restrictions()
: get/set restrictions -
denormalize()
: convert site-level data into horizon-level data via replication -
compositeSPC()
: downgrade an SPC to list of site and horizon-level data
Iteration
-
profileApply()
: apply a function to each profile within an SPC (slow but simple interface) -
summarizeSPC()
: perform group-wise summaries over profiles within an SPC -
transform()
: modify a SPC using expressions that operation on site or horizon-level data
Change of Support
-
dice()
: convert SPC to 1 depth-unit intervals by replication -
slab()
: apply an aggregate function over groups within a “dice()-ed” SPC -
spc2mpspline()
: interface to equal-area spline fitting from mpspline2 package -
segment()
: generate segment labels for depth-weighted aggregation -
L1_profiles()
: create representative profiles via multivariate median (L1 estimator) -
slicedHSD()
: apply Tukey’s HSD over groups within a “dice()-ed” SPC
Horizon Depth Logic
-
accumulateDepths()
: fix horizon depths when old-style O horizon notation has been used -
fillHzGaps()
: fill topological gaps in horizon depth -
repairMissingHzDepths()
: attempt fixing missing or duplicated horizon bottom depths -
flagOverlappingHz()
: flag horizons with perfect overlap -
checkHzDepthLogic()
: apply battery of horizon depth topological tests -
splitLogicErrors()
: split an SPC according to variety of possibly horizon depth errors -
HzDepthLogicSubset()
: remove profiles from an SPC if any depth logic errors are present
Data QC
-
evalMissingData()
: report metrics of missing data by profile within SPC -
missingDataGrid()
: visual indication of missing data -
profileInformationIndex()
: experimental indices of “information content” by profile
Object Coercion
-
as(SPC, 'list')
: convert SPC tolist
-
as(SPC, 'data.frame')
: convert site and horizon data todata.frame
-
as(SPC, 'sf')
: convert site and spatial data to sf object
Spatial Data
-
prj()
: get/set coordinate reference system (CRS) metadata -
initSpatial()
: set (site-level) column names containing coordinates -
getSpatial()
: get spatial data (site + coordinates) from an SPC
Internal Consistency
-
checkSPC()
: check SPC for internal consistency -
rebuildSPC()
: re-make an SPC from a previous version of aqp (rarely required)
Soil Profile Sketches
-
plotSPC()
: create sketches of soil profiles from an SPC -
explainPlotSPC()
: explain various elements of a soil profile sketch -
groupedProfilePlot()
: create grouped sketches of soil profiles -
plotMultipleSPC()
: create sketches from multiple, possibly non-conformal SPCs -
addBracket()
: add vertical brackets beside soil profile sketches -
addDiagnosticBracket()
: add vertical brackets beside soil profile sketches based on diagnostic features -
addVolumeFraction()
: add visual explanation of coarse fragment volume to soil profile sketches -
alignTransect()
: align soil profiles to an external gradient such as topographic sequence
Soil Color / Color Science
Color Conversion
-
col2Munsell()
: convert various color notations to Munsell notation -
munsell2rgb()
: convert Munsell notation to sRGB or CIELAB color coordinates -
parseMunsell()
: parse and optionally convert a munsell color -
spec2Munsell()
: estimate the closest Munsell color given reflectance spectra in the visible range -
getClosestMunsellChip()
: estimate a reasonably close Munsell color given non-standard notation -
estimateSoilColor()
: estimate moist soil color from dry soil color (and vice versa)
Comparison
-
colorContrast()
: pair-wise color contrast and CIE2000 (dE00) based on colors in Munsell notation -
colorContrastPlot()
: visual explanation of soil color contrast and dE00 -
contrastChart()
: Munsell color book style explanation of soil color contrast and dE00 -
soilColorSignature()
: derive soil color signatures for profiles within an SPC
Aggregation
-
colorChart()
: Munsell color book representation of color frequency -
aggregateColor()
: estimate color proportions within an SPC according within groups of horizons -
colorQuantiles()
: marginal and L1 quantiles of color in CIELAB coordinates
Utility
-
huePosition()
: generate an ordered factor of the standard Munsell hues -
huePositionCircle()
: graphical representation of the standard Munsell hues, with optional simulation of common color vision deficiency -
simulateColor()
: simulate a range of Munsell colors given measures of central tendency and spread -
previewColors()
: graphical preview of colors as a grid or via nMDS -
soilPalette()
: generate swatch-like arrangements of colors and labels -
equivalentMunsellChips()
: for a specified Munsell color, identify other Munsell colors with a very lower CIE2000 color contrast difference
Simulation of Mixtures
-
mixMunsell()
: simulate an subtractive mixture of pigments specified in Munsell notation -
plotColorMixture()
: simulate a subtractive mixture of pigments, display reflectance spectra
Numerical Classification of Soil Profiles
-
NCSP()
: numerical classification of soil profiles, within aSoilProfileCollection
-
compareSites()
: pair-wise comparison of site-level data from aSoilProfileCollection
Pedology
-
allocate()
: perform one of several classification systems to soil property data -
estimateAWC()
: estimate plant-available water holding capacity -
correctAWC()
: apply rock fragment or soluble salt corrections to AWC estimates -
hzDistinctnessCodeToOffset()
: convert horizon boundary distinctness codes to vertical offset -
hzTopographyCodeToLineType()
: convert horizon boundary topography codes to line types -
hzTopographyCodeToOffset()
: convert horizon boundary topography codes to offset -
ph_to_rxnclass()
: convert pH to reaction class -
rxnclass_to_ph()
: convert reaction class to pH range -
ReactionClassLevels()
: ordered factor of reaction classes -
horizonColorIndices()
: compute various soil color-based indices to horizons within an SPC
Soil Texture
-
textureTriangleSummary()
: graphical summary of sand, silt, clay fractions on a soil texture triangle
-
bootstrapSoilTexture()
: simulation of realistic compositions (sand, silt, clay) from a small set of example data -
SoilTextureLevels()
: ordered factor of soil texture classes -
texcl_to_ssc()
: convert soil texture classes to sand, silt, clay centroids -
ssc_to_texcl()
: convert sand, silt, clay values to soil texture class -
texture_to_taxpartsize()
: convert soil texture to Soil Taxonomy particle size class
Coarse Fragments
-
fragmentSieve()
: classify coarse fragments by fragment diameter -
texmod_to_fragvoltot()
: estimate ranges in coarse fragment volume based on a soil texture modifier texture_to_texmod()
fragvol_to_texmod()
-
fragmentClasses()
: coarse fragment diameter thresholds used by USDA-NRCS
Soil Taxonomy
-
getArgillicBounds()
: estimate the upper and lower boundaries of an argillic horizon -
getCambicBounds()
: estimate the upper and lower boundaries of a cambic horizon getSurfaceHorizonDepth()
getMineralSoilSurfaceDepth()
getPlowLayerDepth()
hasDarkColors()
estimatePSCS()
Generalized Horizon Labels (GHL)
-
generalize.hz()
: apply REGEX rules to group horizon designations into a reduced set of “generalized horizon labels” -
evalGenHZ()
: evaluate internal consistency of assigned GHL -
genhzTableToAdjMat()
: convert a cross-tabulation of GHL vs. original horizon designations to adjacency matrix -
get.ml.hz()
: extract most likely horizon boundary depths from probability depth functions -
guessGenHzLevels()
: estimate the correct ordering of GHL given horizon depths -
GHL()
: get/set GHL metadata for aSoilProfileCollection
Misc.
-
invertLabelColor()
: automatic adjustment of label color for maximum contrast, based on specified background color -
hzTransitionProbabilities()
: derive transition probability matrix from horizon level data -
mostLikelyHzSequence()
: use Markov Chains to predict the most likely sequence of horizons
Accuracy and Uncertainty
-
shannonEntropy()
: Shannon entropy -
brierScore()
: Brier’s score -
tauW()
: weighted tau statistic
Overlapping Annotation
-
findOverlap()
: identify overlap within a vector of positions based on a given threshold -
overlapMetrics()
: metrics of overlap within a vector or positions based on a given threshold -
fixOverlap()
: attempt the minimum of adjustments to vector of positions such that a given distance threshold is enforced