Modify the original grid of inputs to make it more 'regular' (in the sense that the interval between each observation is constant, or corresponds to a specific pattern defined by the user). In particular, this function can also be used to summarise several data points into one, at a specific location. In this case, the output values are averaged according to the 'summarise_fct' argument.
Arguments
- data
A tibble or data frame. Required columns:
ID
,Output
. TheID
column contains the unique names/codes used to identify each individual/task (or batch of data). TheOutput
column specifies the observed values (the response variable). The data frame can also provide as many inputs as desired, with no constraints on the column names.- size_grid
An integer, which indicates the number of equispaced points each column must contain. Each original input value will be collapsed to the closest point of the new regular grid, and the associated outputs are averaged using the 'summarise_fct' function. This argument is used when 'grid_inputs' is left to 'NULL'. Default value is 30.
- grid_inputs
A data frame, corresponding to a pre-defined grid of inputs according to which we want to regularise a dataset (for instance, if we want to a data point each year between 0 and 10, we can define grid_inputs = seq(0, 10, 1)). If NULL (default), a dedicated grid of inputs is defined: for each input column, a regular sequence is created from the min input values to the max, with a number of equispaced points equal to the 'size_grid' argument.
- summarise_fct
A character string or a function. If several similar inputs are associated with different outputs, the user can choose the summarising function for the output among the following: min, max, mean, median. A custom function can be defined if necessary. Default is "mean".
Examples
data = tibble::tibble(ID = 1, Input = 0:100, Output = -50:50)
## Define a 1D input grid of 10 points
regularize_data(data, size_grid = 10)
#> # A tibble: 10 × 3
#> ID Input Output
#> <dbl> <dbl> <dbl>
#> 1 1 0 -47.5
#> 2 1 11.1 -39
#> 3 1 22.2 -28
#> 4 1 33.3 -17
#> 5 1 44.4 -5.5
#> 6 1 55.6 6
#> 7 1 66.7 17
#> 8 1 77.8 28
#> 9 1 88.9 39
#> 10 1 100 47.5
## Define a 1D custom grid
my_grid = tibble::tibble(Input = c(5, 10, 25, 50, 100))
regularize_data(data, grid_inputs = my_grid)
#> # A tibble: 5 × 3
#> ID Input Output
#> <dbl> <dbl> <dbl>
#> 1 1 5 -46.5
#> 2 1 10 -37.5
#> 3 1 25 -22.5
#> 4 1 50 6
#> 5 1 100 37.5
## Define a 2D input grid of 5x5 points
data_2D = cbind(ID = 1, expand.grid(Input=1:10, Input2=1:10), Output = 1:100)
regularize_data(data_2D, size_grid = 5)
#> # A tibble: 25 × 4
#> ID Input Input2 Output
#> <dbl> <dbl> <dbl> <dbl>
#> 1 1 0 0 1
#> 2 1 0 2.25 16
#> 3 1 0 4.5 36
#> 4 1 0 6.75 56
#> 5 1 0 9 81
#> 6 1 2.25 0 2.5
#> 7 1 2.25 2.25 17.5
#> 8 1 2.25 4.5 37.5
#> 9 1 2.25 6.75 57.5
#> 10 1 2.25 9 82.5
#> # … with 15 more rows
## Define a 2D custom input grid
my_grid_2D = MagmaClustR::expand_grid_inputs(c(2, 4, 8), 'Input2' = c(3, 5))
regularize_data(data_2D, grid_inputs = my_grid_2D)
#> # A tibble: 6 × 4
#> ID Input Input2 Output
#> <dbl> <dbl> <dbl> <dbl>
#> 1 1 2 3 11.5
#> 2 1 2 5 61.5
#> 3 1 4 3 14
#> 4 1 4 5 64
#> 5 1 8 3 18
#> 6 1 8 5 68