install.packages("hydrochem")
library(hydrochem)
data(hc_data); data(data_qc)
data_qc (S72) en % de meq/L, como la dibuja plot_stabler(): 16,2 meq/L de cationes frente a 17,1 de aniones, facies Na-Cl. Casi todo el paquete gira en torno a esta conversión.Ca, no calcio ni CA.base_unit (por defecto, mg/L)."<0.5".| id | Ca | Mg | Na | K | HCO3 | Cl | SO4 | NO3 |
|---|---|---|---|---|---|---|---|---|
| P-01 | 85.2 | 21.4 | 18.9 | 2.1 | 290 | 31.5 | 62 | <1 |
| P-02 | 120 | 35 | 95 | 4.5 | 310 | 160 | 180 | 28 |
cationes mayoritarios aniones mayoritarios otros. Hay 72 en total: hydrochem:::ions_meta.
Los sufijos _N, _P indican concentración expresada como elemento: 10 mg/L de NO3-N son 44,3 mg/L de NO3.
datos <- lab_largo |>
# equiv: c(Calcio = "Ca", ...)
mutate(parametro = equiv[parametro]) |>
pivot_wider(names_from = parametro,
values_from = valor) |>
replace_bdl()
hc_data: 59 muestras con los iones mayoritarios en mg/L y un grupo type (A, B, C). No tiene CO3 ni pH.
data_qc: 146 aguas subterráneas de Quebec, con 55 columnas: pH, iones traza con valores censurados, isótopos, condición hidráulica (Hydro_cond) y clúster.
Convierte "<0.01" en número: LD/2, LD/√2, LD, 0 o NA. Solo toca las columnas con algún «<».
Pasa de mg/L a mmol/L o meq/L y viceversa. Añade columnas Ca_meq, Ca_mmol… Con convert_to_species = TRUE, NO3_N pasa a NO3.
Error de balance iónico (%). Por electroneutralidad, cationes y aniones en meq/L deberían igualarse. Es el primer filtro antes de interpretar.
EB = 100 × Σcat − ΣanΣcat + Σan Criterio habitual: |EB| ≤ 5 % (hasta 10 % en aguas poco mineralizadas)."major_minor" suma Fe, Mn, Sr, Br, F…
Resumen descriptivo completo: percentiles, media geométrica, CV, MAD, n.º de datos y de NA, por grupos si se pide.
Usa siempre el prefijo: choca conggplot2::stat_summary().
Facies: catión y anión dominantes en % meq/L, como "Ca-HCO3". Con "long" lista todos los que superan threshold (20 %): "Ca-Mg-HCO3-SO4".
Sólidos disueltos como suma de iones en mg/L. Otros métodos: "major_si" (+SiO2) y "all_ions".
Dureza = 50 × (Ca + Mg) en meq/L, en mg/L de CaCO3. También en "fH", "dH" o "e". Por encima de 180 mg/L, agua muy dura.
HCO3 + 2 CO3 (+ OH − H). Necesita pH, por eso se prueba con data_qc.
qc <- data_qc |>
replace_bdl() |>
as_tibble() |>
mutate(
eb = ionic_balance(pick(everything())),
facies = water_type(pick(everything())),
SAR = sar(pick(everything()))
) |>
filter(abs(eb) <= 5)
plot_piper(qc, group = "Hydro_cond")
Los cálculos devuelven un vector por fila: encajan en mutate() con pick(everything()).
Todos se calculan en meq/L (la conversión es interna) y se llaman igual: f(data, base_unit).
| Índice | Fórmula |
|---|---|
SAR sar() | Na / √((Ca+Mg)/2) Sodificación del suelo. < 10 excelente; > 26 inadecuada. |
%Na percent_sodium() | 100·Na / (Ca+Mg+Na+K) Wilcox. < 20 excelente; > 60 dudosa. |
Kelly kelly_ratio() | Na / (Ca+Mg) > 1: exceso de sodio. |
RSC rsc() | (HCO3+CO3) − (Ca+Mg) Carbonato sódico residual. > 2,5 meq/L inadecuada. |
PI permeability_index() | 100·(Na+√HCO3) / (Ca+Mg+Na) Doneen. < 25 %: clase III, no apta. |
MH magnesium_hazard() | 100·Mg / (Ca+Mg) > 50 % perjudicial. |
CAI-1 cai1() | (Cl − (Na+K)) / Cl > 0: el agua cede Na al terreno (intercambio inverso, intrusión salina). < 0: lo toma (intercambio directo). |
CAI-2 cai2() | (Cl − (Na+K)) / (SO4+HCO3+CO3+NO3) Misma lectura. Necesita NO3 (o NO3_N). |
Umbrales orientativos de la bibliografía clásica (Richards 1954, Wilcox 1955, Eaton 1950, Doneen 1964…); no los da el paquete.
ind <- list(SAR = sar, KR = kelly_ratio,
MH = magnesium_hazard, CAI1 = cai1)
hc_data |>
select(id, type) |>
bind_cols(map(ind, \(f) f(hc_data)))
+ labs() o + theme()Triángulo de cationes, de aniones y rombo, en % meq/L. Facies de un vistazo; las mezclas se alinean.
include_NO3 group labelLos triángulos proyectados en un cuadrado, con paneles de pH y TDS alineados. Requiere pH.
plot_pH plot_TDS tds_log top_ionsTres solutos cualesquiera (incluso de distinto signo), normalizados en mmol/L o mg/L.
first second third to_unit *_labelUna línea por muestra en meq/L, escala logarítmica. Líneas paralelas: mismas proporciones, distinta concentración.
mg_guide include_NO3 line_colorTDS frente a Na/(Na+Ca) y Cl/(Cl+HCO3): dominio de la lluvia, de la roca o de la evaporación. Cocientes en mg/L.
show_text show_guide tds_methodExpresiones "y ~ x" con recta de referencia: Na:Cl 1:1 (halita), Ca+Mg:HCO3 (carbonatos), Ca:SO4 (yeso).
slope intercept log_x log_y ncolPolígono en meq/L: la forma dice la facies y el tamaño, la mineralización. Ideal como símbolo en mapas.
idcol scales = "free_x" include_NO3 = "Cl"Dos columnas apiladas, cationes y aniones, en % meq/L.
idcol ncol show_labelLas mismas proporciones en barras horizontales, como la cabecera de esta hoja.
idcol ratio facet_dir