The w2l_nest function reshapes wide-format data into long-format and nests it by specified columns. It handles both data.frame and data.table objects and provides options for grouping and nesting the data.

w2l_nest(data, cols2l = NULL, by = NULL, nest_type = "dt")

Arguments

data

data.frame or data.table

  • Input dataset in wide format

  • Automatically converted to data.table if necessary

cols2l

numeric or character columns to transform

  • Specifies columns for wide-to-long conversion

  • Can be column indices or column names

  • Default is NULL

by

numeric or character grouping variables

  • Optional columns for additional data stratification

  • Can be column indices or column names

  • Used to create hierarchical nested structures

  • Default is NULL

nest_type

character output data type

  • Defines nested data object type

  • Possible values:

    • "dt": nested data.table

    • "df": nested data.frame

  • Default is "dt"

Value

data.table with nested data in long format, grouped by specified columns if provided. Each row contains a nested data.table or data.frame under the column data, depending on nest_type.

  • If by is NULL, returns a data.table nested by name.

  • If by is specified, returns a data.table nested by name and the grouping variables.

Details

The function melts the specified wide columns into long format and nests the resulting data by the name column and any additional grouping variables specified in by. The nested data can be in the form of data.table or data.frame objects, controlled by the nest_type parameter.

Both cols2l and by parameters accept either column indices or column names, providing flexible ways to specify the columns for transformation and grouping.

Note

  • Both cols2l and by parameters can be specified using either numeric indices or character column names.

  • When using numeric indices, they must be valid column positions in the data (1 to ncol(data)).

  • When using character names, all specified columns must exist in the data.

  • The function converts data.frame to data.table if necessary.

  • The nest_type parameter controls whether nested data are data.table ("dt") or data.frame ("df") objects.

  • If nest_type is not "dt" or "df", the function will stop with an error.

See also

Related functions and packages:

  • tidytable::nest_by() Nest data.tables by group

Examples

# 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
)
#>       Species               data
#>        <fctr>             <list>
#> 1:     setosa <data.table[50x4]>
#> 2: versicolor <data.table[50x4]>
#> 3:  virginica <data.table[50x4]>

# Example 2: Nest specific columns with numeric indices
w2l_nest(
  data = iris,                    # Input dataset
  cols2l = 1:4,                   # Select first 4 columns to nest
  by = "Species"                  # Group by Species column
)
#>             name    Species               data
#>           <fctr>     <fctr>             <list>
#>  1: Sepal.Length     setosa <data.table[50x1]>
#>  2: Sepal.Length versicolor <data.table[50x1]>
#>  3: Sepal.Length  virginica <data.table[50x1]>
#>  4:  Sepal.Width     setosa <data.table[50x1]>
#>  5:  Sepal.Width versicolor <data.table[50x1]>
#>  6:  Sepal.Width  virginica <data.table[50x1]>
#>  7: Petal.Length     setosa <data.table[50x1]>
#>  8: Petal.Length versicolor <data.table[50x1]>
#>  9: Petal.Length  virginica <data.table[50x1]>
#> 10:  Petal.Width     setosa <data.table[50x1]>
#> 11:  Petal.Width versicolor <data.table[50x1]>
#> 12:  Petal.Width  virginica <data.table[50x1]>

# Example 3: Nest specific columns with column names
w2l_nest(
  data = iris,                    # Input dataset
  cols2l = c("Sepal.Length",      # Select columns by name
             "Sepal.Width", 
             "Petal.Length"),
  by = 5                          # Group by column index 5 (Species)
)
#>            name    Species               data
#>          <fctr>     <fctr>             <list>
#> 1: Sepal.Length     setosa <data.table[50x2]>
#> 2: Sepal.Length versicolor <data.table[50x2]>
#> 3: Sepal.Length  virginica <data.table[50x2]>
#> 4:  Sepal.Width     setosa <data.table[50x2]>
#> 5:  Sepal.Width versicolor <data.table[50x2]>
#> 6:  Sepal.Width  virginica <data.table[50x2]>
#> 7: Petal.Length     setosa <data.table[50x2]>
#> 8: Petal.Length versicolor <data.table[50x2]>
#> 9: Petal.Length  virginica <data.table[50x2]>
# Returns similar structure to Example 2