Convenience function to reorganize soil layer time series data from layer_output list entry produced with run_LWFB90. The data is transformed to a wide format, by casting the variables with the layer number using data.table's dcast-function.

extract_layer_output(
  x,
  layers = NULL,
  value_vars = NULL,
  layer_index_name = "nl",
  sep = ""
)

Arguments

x

Data.frame or data.table with layer data organized in rows and identified by a layer index column named layer_index_nm.

layers

Integer vector to select a subset of layers. If not supplied, values from all layers will be returned.

value_vars

Character vector containing names of value-variables to be extracted from x. If not supplied, value_vars will be guessed.

layer_index_name

Column containing layer index. Defaults to 'nl' as in layer_output.

sep

Separation character for constructing names from variable name and layer index.

Value

A data.table with the layers' values of the variables organized in columns with the names being made up of the variable name and the layer index.

Examples

# create a data.frame with monthly values
# identifiers: layer number, yr and mo
df <- expand.grid(nl = 1:5,
                  yr = 2002,
                  mo = 1:12)
df
#>    nl   yr mo
#> 1   1 2002  1
#> 2   2 2002  1
#> 3   3 2002  1
#> 4   4 2002  1
#> 5   5 2002  1
#> 6   1 2002  2
#> 7   2 2002  2
#> 8   3 2002  2
#> 9   4 2002  2
#> 10  5 2002  2
#> 11  1 2002  3
#> 12  2 2002  3
#> 13  3 2002  3
#> 14  4 2002  3
#> 15  5 2002  3
#> 16  1 2002  4
#> 17  2 2002  4
#> 18  3 2002  4
#> 19  4 2002  4
#> 20  5 2002  4
#> 21  1 2002  5
#> 22  2 2002  5
#> 23  3 2002  5
#> 24  4 2002  5
#> 25  5 2002  5
#> 26  1 2002  6
#> 27  2 2002  6
#> 28  3 2002  6
#> 29  4 2002  6
#> 30  5 2002  6
#> 31  1 2002  7
#> 32  2 2002  7
#> 33  3 2002  7
#> 34  4 2002  7
#> 35  5 2002  7
#> 36  1 2002  8
#> 37  2 2002  8
#> 38  3 2002  8
#> 39  4 2002  8
#> 40  5 2002  8
#> 41  1 2002  9
#> 42  2 2002  9
#> 43  3 2002  9
#> 44  4 2002  9
#> 45  5 2002  9
#> 46  1 2002 10
#> 47  2 2002 10
#> 48  3 2002 10
#> 49  4 2002 10
#> 50  5 2002 10
#> 51  1 2002 11
#> 52  2 2002 11
#> 53  3 2002 11
#> 54  4 2002 11
#> 55  5 2002 11
#> 56  1 2002 12
#> 57  2 2002 12
#> 58  3 2002 12
#> 59  4 2002 12
#> 60  5 2002 12

#add a value variable
df$var <- runif(nrow(df), -1,0)

extract_layer_output(df)
#> Key: <yr, mo>
#>        yr    mo       var1       var2        var3        var4       var5
#>     <num> <int>      <num>      <num>       <num>       <num>      <num>
#>  1:  2002     1 -0.3427016 -0.8781354 -0.68115196 -0.37693897 -0.5530026
#>  2:  2002     2 -0.2917066 -0.1099710 -0.89569350 -0.36958828 -0.1584411
#>  3:  2002     3 -0.6357376 -0.3770772 -0.53925249 -0.83658772 -0.4861331
#>  4:  2002     4 -0.8567336 -0.3497013 -0.84470547 -0.49169014 -0.9141296
#>  5:  2002     5 -0.4969733 -0.9614281 -0.17596712 -0.71401443 -0.7532491
#>  6:  2002     6 -0.6020064 -0.3679071 -0.05142115 -0.65988076 -0.3726340
#>  7:  2002     7 -0.1750846 -0.8548846 -0.03286087 -0.91396101 -0.7595388
#>  8:  2002     8 -0.3611163 -0.4966049 -0.74947674 -0.02096623 -0.3434204
#>  9:  2002     9 -0.9101511 -0.3694571 -0.12323234 -0.06971846 -0.5805141
#> 10:  2002    10 -0.5044401 -0.6472953 -0.75126513 -0.04127210 -0.6400399
#> 11:  2002    11 -0.8010138 -0.2737147 -0.83186755 -0.77351867 -0.1544599
#> 12:  2002    12 -0.6541464 -0.9326802 -0.97298055 -0.88195543 -0.9863046

# add more variables
df$var1 <- runif(nrow(df), 1,2)
df$var2 <- runif(nrow(df), 2,3)

# extract specific layers
extract_layer_output(df,layers = 2:4, sep = "_layer")
#> Key: <yr, mo>
#>        yr    mo var_layer2  var_layer3  var_layer4 var1_layer2 var1_layer3
#>     <num> <int>      <num>       <num>       <num>       <num>       <num>
#>  1:  2002     1 -0.8781354 -0.68115196 -0.37693897    1.251578    1.814231
#>  2:  2002     2 -0.1099710 -0.89569350 -0.36958828    1.628450    1.566586
#>  3:  2002     3 -0.3770772 -0.53925249 -0.83658772    1.316116    1.588247
#>  4:  2002     4 -0.3497013 -0.84470547 -0.49169014    1.924520    1.880309
#>  5:  2002     5 -0.9614281 -0.17596712 -0.71401443    1.906492    1.719318
#>  6:  2002     6 -0.3679071 -0.05142115 -0.65988076    1.091970    1.936429
#>  7:  2002     7 -0.8548846 -0.03286087 -0.91396101    1.737795    1.429432
#>  8:  2002     8 -0.4966049 -0.74947674 -0.02096623    1.569741    1.286187
#>  9:  2002     9 -0.3694571 -0.12323234 -0.06971846    1.696489    1.770643
#> 10:  2002    10 -0.6472953 -0.75126513 -0.04127210    1.700768    1.616499
#> 11:  2002    11 -0.2737147 -0.83186755 -0.77351867    1.039941    1.159275
#> 12:  2002    12 -0.9326802 -0.97298055 -0.88195543    1.431522    1.401598
#>     var1_layer4 var2_layer2 var2_layer3 var2_layer4
#>           <num>       <num>       <num>       <num>
#>  1:    1.001646    2.107332    2.934998    2.466505
#>  2:    1.417966    2.072994    2.739590    2.896378
#>  3:    1.763934    2.356315    2.635668    2.018531
#>  4:    1.794478    2.571561    2.338220    2.850974
#>  5:    1.242587    2.677988    2.962416    2.501423
#>  6:    1.759171    2.690719    2.111790    2.166162
#>  7:    1.029104    2.373411    2.650485    2.361006
#>  8:    1.437341    2.097978    2.983512    2.652000
#>  9:    1.530409    2.099010    2.179128    2.874177
#> 10:    1.429831    2.774802    2.137970    2.728306
#> 11:    1.809297    2.151496    2.056559    2.412473
#> 12:    1.922565    2.394607    2.546368    2.159229

#extract specific variables
extract_layer_output(df, layers = 2:4, value_vars = c("var1", "var2"), sep = "_layer")
#> Key: <yr, mo>
#>        yr    mo var1_layer2 var1_layer3 var1_layer4 var2_layer2 var2_layer3
#>     <num> <int>       <num>       <num>       <num>       <num>       <num>
#>  1:  2002     1    1.251578    1.814231    1.001646    2.107332    2.934998
#>  2:  2002     2    1.628450    1.566586    1.417966    2.072994    2.739590
#>  3:  2002     3    1.316116    1.588247    1.763934    2.356315    2.635668
#>  4:  2002     4    1.924520    1.880309    1.794478    2.571561    2.338220
#>  5:  2002     5    1.906492    1.719318    1.242587    2.677988    2.962416
#>  6:  2002     6    1.091970    1.936429    1.759171    2.690719    2.111790
#>  7:  2002     7    1.737795    1.429432    1.029104    2.373411    2.650485
#>  8:  2002     8    1.569741    1.286187    1.437341    2.097978    2.983512
#>  9:  2002     9    1.696489    1.770643    1.530409    2.099010    2.179128
#> 10:  2002    10    1.700768    1.616499    1.429831    2.774802    2.137970
#> 11:  2002    11    1.039941    1.159275    1.809297    2.151496    2.056559
#> 12:  2002    12    1.431522    1.401598    1.922565    2.394607    2.546368
#>     var2_layer4
#>           <num>
#>  1:    2.466505
#>  2:    2.896378
#>  3:    2.018531
#>  4:    2.850974
#>  5:    2.501423
#>  6:    2.166162
#>  7:    2.361006
#>  8:    2.652000
#>  9:    2.874177
#> 10:    2.728306
#> 11:    2.412473
#> 12:    2.159229