--- title: "Reshape and nest" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{Reshape and nest} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` ```{r} library(mintyr) ``` These functions turn a wide table (one column per trait) into pieces that can be analysed one at a time: by trait and group (`w2l_nest()`, `w2l_split()`), by pairs of traits (`c2p_nest()`), or with the levels of one column side by side (`r2p_nest()`). # Wide to long, nested: `w2l_nest()` ```{r example-w2l_nest} # Example: Wide to long format nesting demonstrations # Example 1: Basic nesting by group w2l_nest( data = iris, # Input dataset by = "Species" # Group by Species column ) # Example 2: Nest specific columns with numeric indices w2l_nest( data = iris, # Input dataset cols = 1:4, # Select first 4 columns to nest by = "Species" # Group by Species column ) # Example 3: Nest specific columns with column names w2l_nest( data = iris, # Input dataset cols = c("Sepal.Length", # Select columns by name "Sepal.Width", "Petal.Length"), by = 5 # Group by column index 5 (Species) ) # Returns similar structure to Example 2 ``` # Wide to long, split into a list: `w2l_split()` ```{r example-w2l_split} # Example: Wide to long format splitting demonstrations # Example 1: Basic splitting by Species w2l_split( data = iris, # Input dataset by = "Species" # Split by Species column ) |> lapply(head) # Show first 6 rows of each split # Example 2: Split specific columns using numeric indices w2l_split( data = iris, # Input dataset cols = 1:3, # Select first 3 columns to split by = 5 # Split by column index 5 (Species) ) |> lapply(head) # Show first 6 rows of each split # Example 3: Split specific columns using column names list_res <- w2l_split( data = iris, # Input dataset cols = c("Sepal.Length", # Select columns by name "Sepal.Width"), by = "Species" # Split by Species column ) lapply(list_res, head) # Show first 6 rows of each split # Returns similar structure to Example 2 ``` # All pairs of columns: `c2p_nest()` ```{r example-c2p_nest} # Example data preparation: Define column names for combination col_names <- c("Sepal.Length", "Sepal.Width", "Petal.Length") # Example 1: Basic column-to-pairs nesting with custom separator c2p_nest( iris, # Input iris dataset cols = col_names, # Columns to be combined as pairs pairs_n = 2, # Create pairs of 2 columns sep = "&" # Custom separator for pair names ) # Returns a nested data.table where: # - pairs: combined column names (e.g., "Sepal.Length&Sepal.Width") # - data: list column containing data.tables with value1, value2 columns # Example 2: Column-to-pairs nesting with numeric indices and grouping c2p_nest( iris, # Input iris dataset cols = 1:3, # First 3 columns to be combined pairs_n = 2, # Create pairs of 2 columns by = 5 # Group by 5th column (Species) ) # Returns a nested data.table where: # - pairs: combined column names # - Species: grouping variable # - data: list column containing data.tables grouped by Species ``` # Levels of a column side by side: `r2p_nest()` ```{r example-r2p_nest} # Example: the same traits recorded on the same animals in two farms set.seed(1) growth <- data.frame( animal = rep(sprintf("A%02d", 1:6), each = 2), farm = rep(c("farm1", "farm2"), times = 6), adg = round(rnorm(12, 900, 50)), # average daily gain bf = round(rnorm(12, 11, 1.5), 1) # backfat ) # Example 1: column names r2p_nest( growth, names_from = "farm", # levels become columns: farm1, farm2 cols = c("adg", "bf"), # traits to pivot id = "animal" # aligns records of the same animal ) # Returns a nested data.table where: # - name: trait names (adg, bf) # - data: one row per animal with columns animal, farm1, farm2 # Example 2: numeric indices r2p_nest(growth, names_from = 2, cols = 3:4, id = 1) ```