Calculates column sums for a matrix by premultiplying by an identity vector (containing all 1's).
In contrast to colSums (which returns a numeric result),
the return value from colsums_byname is a matrix.
An optional rowname for the resulting row vector can be supplied.
If rowname is NA (the default),
the row name is set to the row type as given by rowtype(a).
If rowname is set to NULL, the row name is returned empty.
Arguments
- a
A matrix or list of matrices from which column sums are desired.
- rowname
The name of the output row containing column sums.
Examples
library(dplyr)
colsums_byname(42)
#> [1] 42
m <- matrix(c(1:6), nrow = 2, dimnames = list(paste0("i", 1:2), paste0("c", 3:1))) %>%
setrowtype("Industries") %>% setcoltype("Commodities")
m
#> c3 c2 c1
#> i1 1 3 5
#> i2 2 4 6
#> attr(,"rowtype")
#> [1] "Industries"
#> attr(,"coltype")
#> [1] "Commodities"
colsums_byname(m)
#> c1 c2 c3
#> Industries 11 7 3
#> attr(,"rowtype")
#> [1] "Industries"
#> attr(,"coltype")
#> [1] "Commodities"
colsums_byname(m, rowname = "E.ktoe")
#> c1 c2 c3
#> E.ktoe 11 7 3
#> attr(,"rowtype")
#> [1] "Industries"
#> attr(,"coltype")
#> [1] "Commodities"
m %>%
colsums_byname() %>%
rowsums_byname()
#> Commodities
#> Industries 21
#> attr(,"rowtype")
#> [1] "Industries"
#> attr(,"coltype")
#> [1] "Commodities"
# This also works with lists
colsums_byname(list(m, m))
#> [[1]]
#> c1 c2 c3
#> Industries 11 7 3
#> attr(,"rowtype")
#> [1] "Industries"
#> attr(,"coltype")
#> [1] "Commodities"
#>
#> [[2]]
#> c1 c2 c3
#> Industries 11 7 3
#> attr(,"rowtype")
#> [1] "Industries"
#> attr(,"coltype")
#> [1] "Commodities"
#>
colsums_byname(list(m, m), rowname = "E.ktoe")
#> [[1]]
#> c1 c2 c3
#> E.ktoe 11 7 3
#> attr(,"rowtype")
#> [1] "Industries"
#> attr(,"coltype")
#> [1] "Commodities"
#>
#> [[2]]
#> c1 c2 c3
#> E.ktoe 11 7 3
#> attr(,"rowtype")
#> [1] "Industries"
#> attr(,"coltype")
#> [1] "Commodities"
#>
colsums_byname(list(m, m), rowname = NA)
#> [[1]]
#> c1 c2 c3
#> Industries 11 7 3
#> attr(,"rowtype")
#> [1] "Industries"
#> attr(,"coltype")
#> [1] "Commodities"
#>
#> [[2]]
#> c1 c2 c3
#> Industries 11 7 3
#> attr(,"rowtype")
#> [1] "Industries"
#> attr(,"coltype")
#> [1] "Commodities"
#>
colsums_byname(list(m, m), rowname = NULL)
#> [[1]]
#> c1 c2 c3
#> [1,] 11 7 3
#> attr(,"rowtype")
#> [1] "Industries"
#> attr(,"coltype")
#> [1] "Commodities"
#>
#> [[2]]
#> c1 c2 c3
#> [1,] 11 7 3
#> attr(,"rowtype")
#> [1] "Industries"
#> attr(,"coltype")
#> [1] "Commodities"
#>
DF <- data.frame(m = I(list()))
DF[[1,"m"]] <- m
DF[[2,"m"]] <- m
colsums_byname(DF$m[[1]])
#> c1 c2 c3
#> Industries 11 7 3
#> attr(,"rowtype")
#> [1] "Industries"
#> attr(,"coltype")
#> [1] "Commodities"
colsums_byname(DF$m)
#> [[1]]
#> c1 c2 c3
#> Industries 11 7 3
#> attr(,"rowtype")
#> [1] "Industries"
#> attr(,"coltype")
#> [1] "Commodities"
#>
#> [[2]]
#> c1 c2 c3
#> Industries 11 7 3
#> attr(,"rowtype")
#> [1] "Industries"
#> attr(,"coltype")
#> [1] "Commodities"
#>
colsums_byname(DF$m, "sums")
#> [[1]]
#> c1 c2 c3
#> sums 11 7 3
#> attr(,"rowtype")
#> [1] "Industries"
#> attr(,"coltype")
#> [1] "Commodities"
#>
#> [[2]]
#> c1 c2 c3
#> sums 11 7 3
#> attr(,"rowtype")
#> [1] "Industries"
#> attr(,"coltype")
#> [1] "Commodities"
#>
res <- DF %>% mutate(
cs = colsums_byname(m),
cs2 = colsums_byname(m, rowname = "sum")
)
res$cs2
#> [[1]]
#> c1 c2 c3
#> sum 11 7 3
#> attr(,"rowtype")
#> [1] "Industries"
#> attr(,"coltype")
#> [1] "Commodities"
#>
#> [[2]]
#> c1 c2 c3
#> sum 11 7 3
#> attr(,"rowtype")
#> [1] "Industries"
#> attr(,"coltype")
#> [1] "Commodities"
#>