Convenience function to reorganize soil layer time series data from layer_output list entry produced with run_LWFB90. The data is tansformed 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 constructig 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)
#>       yr mo        var1       var2         var3        var4         var5
#>  1: 2002  1 -0.16480767 -0.7363713 -0.450816991 -0.22917956 -0.828359965
#>  2: 2002  2 -0.26055609 -0.6714478 -0.365760029 -0.23650065 -0.640860982
#>  3: 2002  3 -0.94099979 -0.3853408 -0.721296859 -0.87592338 -0.857721671
#>  4: 2002  4 -0.55891793 -0.3499749 -0.005438818 -0.55720164 -0.212353946
#>  5: 2002  5 -0.92582842 -0.8204014 -0.747671254 -0.83317727 -0.719985466
#>  6: 2002  6 -0.95175544 -0.6504895 -0.509334259 -0.36558540 -0.265463822
#>  7: 2002  7 -0.06155794 -0.7201865 -0.707403520 -0.05634485 -0.342059582
#>  8: 2002  8 -0.35332827 -0.3031461 -0.826367595 -0.08687404 -0.933860048
#>  9: 2002  9 -0.56805584 -0.1848150 -0.217588380 -0.69276000 -0.092262531
#> 10: 2002 10 -0.30945862 -0.8701533 -0.152375176 -0.65399429 -0.003415519
#> 11: 2002 11 -0.87509092 -0.5769271 -0.671267465 -0.41564302 -0.069455668
#> 12: 2002 12 -0.72481623 -0.6373049 -0.502003587 -0.64624194 -0.987994365

# 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")
#>       yr mo var_layer2   var_layer3  var_layer4 var1_layer2 var1_layer3
#>  1: 2002  1 -0.7363713 -0.450816991 -0.22917956    1.469337    1.667517
#>  2: 2002  2 -0.6714478 -0.365760029 -0.23650065    1.977341    1.684494
#>  3: 2002  3 -0.3853408 -0.721296859 -0.87592338    1.279947    1.187596
#>  4: 2002  4 -0.3499749 -0.005438818 -0.55720164    1.456246    1.628871
#>  5: 2002  5 -0.8204014 -0.747671254 -0.83317727    1.812764    1.313226
#>  6: 2002  6 -0.6504895 -0.509334259 -0.36558540    1.157975    1.960097
#>  7: 2002  7 -0.7201865 -0.707403520 -0.05634485    1.661000    1.829302
#>  8: 2002  8 -0.3031461 -0.826367595 -0.08687404    1.883449    1.155952
#>  9: 2002  9 -0.1848150 -0.217588380 -0.69276000    1.340790    1.674713
#> 10: 2002 10 -0.8701533 -0.152375176 -0.65399429    1.893890    1.190447
#> 11: 2002 11 -0.5769271 -0.671267465 -0.41564302    1.854039    1.805623
#> 12: 2002 12 -0.6373049 -0.502003587 -0.64624194    1.781052    1.681226
#>     var1_layer4 var2_layer2 var2_layer3 var2_layer4
#>  1:    1.537465    2.596767    2.542806    2.694798
#>  2:    1.806034    2.940629    2.601226    2.158738
#>  3:    1.872244    2.156322    2.948156    2.486081
#>  4:    1.472411    2.767475    2.283582    2.464242
#>  5:    1.204853    2.397508    2.089493    2.018675
#>  6:    1.693735    2.986667    2.934715    2.479744
#>  7:    1.886658    2.347579    2.045067    2.892287
#>  8:    1.468420    2.974374    2.703891    2.641573
#>  9:    1.544759    2.786758    2.509810    2.623675
#> 10:    1.417110    2.541619    2.311058    2.434701
#> 11:    1.021273    2.017398    2.605439    2.191787
#> 12:    1.596433    2.829182    2.918514    2.212208

#extract specific variables
extract_layer_output(df, layers = 2:4, value_vars = c("var1", "var2"), sep = "_layer")
#>       yr mo var1_layer2 var1_layer3 var1_layer4 var2_layer2 var2_layer3
#>  1: 2002  1    1.469337    1.667517    1.537465    2.596767    2.542806
#>  2: 2002  2    1.977341    1.684494    1.806034    2.940629    2.601226
#>  3: 2002  3    1.279947    1.187596    1.872244    2.156322    2.948156
#>  4: 2002  4    1.456246    1.628871    1.472411    2.767475    2.283582
#>  5: 2002  5    1.812764    1.313226    1.204853    2.397508    2.089493
#>  6: 2002  6    1.157975    1.960097    1.693735    2.986667    2.934715
#>  7: 2002  7    1.661000    1.829302    1.886658    2.347579    2.045067
#>  8: 2002  8    1.883449    1.155952    1.468420    2.974374    2.703891
#>  9: 2002  9    1.340790    1.674713    1.544759    2.786758    2.509810
#> 10: 2002 10    1.893890    1.190447    1.417110    2.541619    2.311058
#> 11: 2002 11    1.854039    1.805623    1.021273    2.017398    2.605439
#> 12: 2002 12    1.781052    1.681226    1.596433    2.829182    2.918514
#>     var2_layer4
#>  1:    2.694798
#>  2:    2.158738
#>  3:    2.486081
#>  4:    2.464242
#>  5:    2.018675
#>  6:    2.479744
#>  7:    2.892287
#>  8:    2.641573
#>  9:    2.623675
#> 10:    2.434701
#> 11:    2.191787
#> 12:    2.212208