complete_rows_cols: Complete rows and columns in one matrix relative to another

View source: R/CompletingMatrices.R

complete_rows_colsR Documentation

Complete rows and columns in one matrix relative to another

Description

"Completing" rows and columns means that a contains a union of rows and columns between a and m, with missing data represented by the value for fill (0, by default).

Usage

complete_rows_cols(
  a = NULL,
  mat = NULL,
  fill = 0,
  fillrow = NULL,
  fillcol = NULL,
  margin = c(1, 2)
)

Arguments

a

a matrix or list of matrices to be completed.

mat

a matrix from which dimnames will be extracted for the purposes of completing a with respect to mat.

fill

rows and columns added to a will contain the value fill. (Default is 0.)

fillrow

a row vector of type matrix with same column names as a. Any rows added to a will be fillrow. If non-NULL, fillrow takes precedence over both fillcol and fill in the case of conflicts.

fillcol

a column vector of type matrix with same row names as a. Any columns added to a will be fillcol. If non-NULL, fillcol takes precedence over fill in the case of conflicts.

margin

specifies the subscript(s) in a over which completion will occur margin has nearly the same semantic meaning as in apply For rows only, give 1; for columns only, give 2; for both rows and columns, give c(1,2), the default value.

Details

Note that complete_rows_cols(mat1, mat2) and complete_rows_cols(mat2, mat1) are not guaranteed to have the same order for rows and columns. (Nor are the values in the matrix guaranteed to have the same positions.) If dimnames(mat) is NULL, a is returned unmodified. If either a or matrix are missing names on a margin (row or column), an error is given. Matrices can be completed relative to themselves, meaning that a will be made square, containing the union of row and column names from a itself. All added rows and columns will be created from one of the fill* arguments. When conflicts arise, precedence among the fill* arguments is fillrow then fillcol then fill. Self-completion occurs if a is non-NULL and both is.null(matrix) and is.null(names). Under these conditions, no warning is given. If is.null(names) and dimnames of matrix cannot be determined (because, for example, matrix doesn't have any dimnames), a is completed relative to itself and a warning is given.

Value

A modified version of a possibly containing additional rows and columns whose names are obtained from matrix

Examples

m1 <- matrix(c(1:6), nrow=3, dimnames = list(c("r1", "r2", "r3"), c("c1", "c2")))
m2 <- matrix(c(7:12), ncol=3, dimnames = list(c("r2", "r3"), c("c2", "c3", "c4")))
complete_rows_cols(m1, m2) # Adds empty column c4
complete_rows_cols(m1, t(m2)) # Creates r2, r3 columns; c2, c3, c4 rows
complete_rows_cols(m1, m2, margin = 1) # No changes because r2 and r3 already present in m1
complete_rows_cols(m1, m2, margin = 2) # Adds empty columns c3 and c4
complete_rows_cols(m1, t(m2), margin = 1) # Adds empty rows c2, c3, c4
complete_rows_cols(m1, m2, fill = 100) # Adds columns c3 and c4 with 100's
complete_rows_cols(m1, m1) # Nothing added, because everything already present
complete_rows_cols(m1, t(m1)) # Adds empty c1, c2 rows; Adds empty r1, r2, r3 columns
# Same as previous. With missing matrix, complete relative to transpose of m1.
complete_rows_cols(m1) 
# Adds rows r10, r11; cols c10, c11
complete_rows_cols(m1, matrix(0, nrow = 2, ncol = 2, 
                              dimnames = list(c("r10", "r11"), c("c10", "c11")))) 
# Also works with lists
complete_rows_cols(a = list(m1,m1))
complete_rows_cols(a = list(m1,m1), mat = list(m2,m2))
# No changes because r2, r3 already present in m1
complete_rows_cols(a = list(m1,m1), mat = list(m2,m2), margin = 1) 
complete_rows_cols(a = list(m1,m1), mat = list(m2,m2), margin = 2)
complete_rows_cols(a = list(m1,m1), 
                   mat = make_list(matrix(0, nrow = 2, ncol = 2, 
                                          dimnames = list(c("r10", "r11"), c("c10", "c11"))), 
                                   n = 2, lenx = 1))
# fillrow or fillcol can be specified
a <- matrix(c(11, 12, 21, 22), byrow = TRUE, nrow = 2, ncol = 2, 
            dimnames = list(c("r1", "r2"), c("c1", "c2")))
b <- matrix(c(1:6), byrow = TRUE, nrow = 3, ncol = 2, 
            dimnames = list(c("r1", "r2", "r3"), c("c1", "c2")))
fillrow <- matrix(c(31, 32), byrow = TRUE, nrow = 1, ncol = 2, 
                  dimnames = list("r42", c("c1", "c2")))
complete_rows_cols(a = a, mat = b, fillrow = fillrow)

matsbyname documentation built on April 2, 2022, 1:06 a.m.