https://github.com/marceelrf/tidyspec
Analyze spectroscopy data using tidy-data philosophy
https://github.com/marceelrf/tidyspec
ftir spectroscopy tidy-data
Last synced: 7 months ago
JSON representation
Analyze spectroscopy data using tidy-data philosophy
- Host: GitHub
- URL: https://github.com/marceelrf/tidyspec
- Owner: marceelrf
- License: other
- Created: 2022-07-31T16:53:09.000Z (almost 4 years ago)
- Default Branch: master
- Last Pushed: 2025-08-29T13:56:35.000Z (9 months ago)
- Last Synced: 2025-10-22T03:53:13.919Z (7 months ago)
- Topics: ftir, spectroscopy, tidy-data
- Language: R
- Homepage:
- Size: 14.3 MB
- Stars: 9
- Watchers: 1
- Forks: 1
- Open Issues: 1
-
Metadata Files:
- Readme: README.Rmd
- Changelog: NEWS.md
- License: LICENSE
Awesome Lists containing this project
README
---
output: github_document
---
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>",
fig.path = "man/figures/README-",
out.width = "100%"
)
```
# tidyspec 
[](https://github.com/marceelrf/tidyspec/actions/workflows/R-CMD-check.yaml)
[](https://CRAN.R-project.org/package=tidyspec)
[](https://opensource.org/licenses/MIT)
The goal of **tidyspec** is to provide a friendly pipeline for spectroscopy analysis using the tidy data philosophy.
## Installation
You can install from CRAN (0.1.0):
```{r eval=FALSE}
install.packages("tidyspec")
```
You can install the development version of tidyspec from [GitHub](https://github.com/) with:
``` r
# install.packages("devtools")
devtools::install_github("marceelrf/tidyspec")
```
## About
The `tidyspec` package was design to enable the data analysis of spectroscopy data (as IR, Raman, NMR) with the tidy-data format. There are 6 families of functions in `tidyspec`, all starting with `spec_`:
- **Transformation**: Convert data from absorbance to transmittance (`spec_abs2trans`) & from transmittance to absorbance (`spec_trans2abs`).
- **Normalize**: Normalize the data to range 0-1 (`spec_norm_01`), normalize between a custom range (`spec_norm_minmax`), or normalize to have a standard deviation of one (`spec_norm_var`).
- **Baseline correction**: Correct the baseline using the the *rolling ball* algorithm (`spec_blc_rollingBall`) or *Rubberband* (`spec_blc_rubberband`). The function `spec_bl` return the baseline vectors (`spec_bl_rollingBall`, `spec_bl_rubberband`).
- **Smooth correction**: Smooth the data using the average window (`spec_smooth_avg`) or using the Savitzky-Golay algorithm (`spec_smooth_sga`).
- **Derivative**: Create differential data from the spectra (`spec_diff`).
- **Preview**: Preview your data while applying changes statically (`spec_smartplot`) or interactively (`spec_smartplotly`).
- **Import/Export**: Import spectra data from common data formats, like csv, txt, tsv, xslx and xls, with `spec_read`. Export functions will be created in next moment, but user can easily use `{readr}` or `{writexl}` functions.
The function `set_spec_wn` simplifies the use of functions by globally defining the column that contains the wave numbers. User can check the wavenumber column with `check_wn_col`.
## Example
This is a basic example which shows you how to solve a common problem:
```{r example, warning=FALSE}
library(tidyspec)
```
### The data
```{r the data}
head(CoHAspec)
```
### Set the wavenumber column
```{r set the wavenumber column}
set_spec_wn("Wavenumber")
check_wn_col()
```
### Plot the data
```{r plot_the_data, out.width = "100%",fig.alt="Static plot", fig.dpi=300}
spec_smartplot(CoHAspec)
```
### Convert to trasmittance
```{r plot_the_data_in_transmittance, out.width = "100%",fig.alt="Transmittance plot", fig.dpi=300}
CoHAspec |>
spec_abs2trans() |>
spec_smartplot(type = "transmittance")
```
### Select the spectra
```{r select_the_CoHA01_data, out.width = "100%",fig.alt="CoHA01 plot", fig.dpi=300}
spec_select(CoHAspec, CoHA01) |>
spec_smartplot(geom = "line")
```
## The future of `tidyspec`
Our plan is for tidyspec to be the first step toward a complete ecosystem for spectral data analysis. For spectral band analysis, we are creating the [bandspec](https://github.com/marceelrf/bandspec) package that handles different band profiles. We also intend to create a package focused on producing publication-level graphics for spectral data. We haven't thought of a name yet, so we welcome suggestions!