Any tidy data frame of matrices (in which each row represents one matrix observation)
can also be represented as a tidy data frame
with each non-zero matrix entry as an observation on its own row.
This function and collapse_to_matrices() convert between the two representations.
Usage
expand_to_tidy(
.DF,
matnames = "matnames",
matvals = "matvals",
rownames = "rownames",
colnames = "colnames",
rowtypes = "rowtypes",
coltypes = "coltypes",
drop = NA
)Arguments
- .DF
The data frame containing matsindf-style matrices. (
.DFmay also be a named list of matrices, in which case names of the matrices are taken from the names of items in the list and list items are expected to be matrices.)- matnames
The name of the column in
.DFcontaining matrix names (a string). Default is "matnames".- matvals
The name of the column in
.DFcontaining IO-style matrices or constants (a string). This will also be the name of the column containing matrix entries in the output data frame. Default is "matvals".- rownames
The name for the output column of row names (a string). Default is "rownames".
- colnames
The name for the output column of column names (a string). Default is "colnames".
- rowtypes
An optional name for the output column of row types (a string). Default is "rowtypes".
- coltypes
The optional name for the output column of column types (a string). Default is "coltypes".
- drop
If specified, the value to be dropped from output, For example,
drop = 0will cause0entries in the matrices to be deleted from output. IfNA, no values are dropped from output. Default isNA.
Details
Names for output columns are specified in the rownames, colnames,
rowtypes, and coltypes, arguments.
The entries of the matsindf-style matrices are stored in an output column named values.
Examples
library(dplyr)
library(matsbyname)
ptype <- "Products"
itype <- "Industries"
tidy <- data.frame(Country = c( "GH", "GH", "GH", "GH", "GH", "GH", "GH",
"US", "US", "US", "US", "GH", "US"),
Year = c( 1971, 1971, 1971, 1971, 1971, 1971, 1971,
1980, 1980, 1980, 1980, 1971, 1980),
matrix = c( "U", "U", "Y", "Y", "Y", "V", "V",
"U", "U", "Y", "Y", "eta", "eta"),
row = c( "c1", "c2", "c1", "c2", "c2", "i1", "i2",
"c1", "c1", "c1", "c2", NA, NA),
col = c( "i1", "i2", "i1", "i2", "i3", "c1", "c2",
"i1", "i2", "i1", "i2", NA, NA),
rowtypes = c( ptype, ptype, ptype, ptype, ptype, itype, itype,
ptype, ptype, ptype, ptype, NA, NA),
coltypes = c(itype, itype, itype, itype, itype, ptype, ptype,
itype, itype, itype, itype, NA, NA),
vals = c(11 , 22, 11 , 22 , 23 , 11 , 22 ,
11 , 12 , 11 , 22, 0.2, 0.3)) %>%
group_by(Country, Year, matrix)
mats <- collapse_to_matrices(tidy, matnames = "matrix", rownames = "row", colnames = "col",
rowtypes = "rowtypes", coltypes = "coltypes",
matvals = "vals") %>%
ungroup()
expand_to_tidy(mats, matnames = "matrix", matvals = "vals",
rownames = "rows", colnames = "cols",
rowtypes = "rt", coltypes = "ct")
#> # A tibble: 22 × 8
#> Country Year matrix rows cols vals rt ct
#> <chr> <dbl> <chr> <chr> <chr> <dbl> <chr> <chr>
#> 1 GH 1971 U c1 i1 11 Products Industries
#> 2 GH 1971 U c2 i1 0 Products Industries
#> 3 GH 1971 U c1 i2 0 Products Industries
#> 4 GH 1971 U c2 i2 22 Products Industries
#> 5 GH 1971 V i1 c1 11 Industries Products
#> 6 GH 1971 V i2 c1 0 Industries Products
#> 7 GH 1971 V i1 c2 0 Industries Products
#> 8 GH 1971 V i2 c2 22 Industries Products
#> 9 GH 1971 Y c1 i1 11 Products Industries
#> 10 GH 1971 Y c2 i1 0 Products Industries
#> # ℹ 12 more rows
expand_to_tidy(mats, matnames = "matrix", matvals = "vals",
rownames = "rows", colnames = "cols",
rowtypes = "rt", coltypes = "ct", drop = 0)
#> # A tibble: 13 × 8
#> Country Year matrix rows cols vals rt ct
#> <chr> <dbl> <chr> <chr> <chr> <dbl> <chr> <chr>
#> 1 GH 1971 U c1 i1 11 Products Industries
#> 2 GH 1971 U c2 i2 22 Products Industries
#> 3 GH 1971 V i1 c1 11 Industries Products
#> 4 GH 1971 V i2 c2 22 Industries Products
#> 5 GH 1971 Y c1 i1 11 Products Industries
#> 6 GH 1971 Y c2 i2 22 Products Industries
#> 7 GH 1971 Y c2 i3 23 Products Industries
#> 8 GH 1971 eta NA NA 0.2 NA NA
#> 9 US 1980 U c1 i1 11 Products Industries
#> 10 US 1980 U c1 i2 12 Products Industries
#> 11 US 1980 Y c1 i1 11 Products Industries
#> 12 US 1980 Y c2 i2 22 Products Industries
#> 13 US 1980 eta NA NA 0.3 NA NA