Checks that row names are unique and that column names are unique. Then, sorts the rows and columns in a way that ensures any other matrix with the same row and column names will have the same order.
sort_rows_cols(a, margin = c(1, 2), roworder = NA, colorder = NA)
a | a matrix or data frame whose rows and columns are to be sorted |
---|---|
margin | specifies the subscript(s) in |
roworder | specifies the order for rows with default |
colorder | specifies the order for rows with default |
A modified version of a
with sorted rows and columns
Default sort order is given by base::sort()
with decreasing = FALSE
.
#> c2 c4 #> r1 6 3 #> r3 4 1 #> r5 5 2#> r1 r3 r5 #> c2 6 4 5 #> c4 3 1 2sort_rows_cols(m, margin=1) # Sorts rows#> c4 c2 #> r1 3 6 #> r3 1 4 #> r5 2 5sort_rows_cols(m, margin=2) # Sorts columns#> c2 c4 #> r3 4 1 #> r5 5 2 #> r1 6 3v <- matrix(c(1:5), ncol=1, dimnames=list(rev(paste0("r", 1:5)), "c1")) # Column vector sort_rows_cols(v)#> c1 #> r1 5 #> r2 4 #> r3 3 #> r4 2 #> r5 1sort_rows_cols(v, margin = 1) # Sorts rows#> c1 #> r1 5 #> r2 4 #> r3 3 #> r4 2 #> r5 1sort_rows_cols(v, margin = 2) # No effect: only one column#> c1 #> r5 1 #> r4 2 #> r3 3 #> r2 4 #> r1 5r <- matrix(c(1:4), nrow=1, dimnames=list("r1", rev(paste0("c", 1:4)))) # Row vector sort_rows_cols(r) # Sorts columns#> c1 c2 c3 c4 #> r1 4 3 2 1n <- matrix(c(1,2), nrow = 1, dimnames = list(NULL, c("c2", "c1"))) # No row name sort_rows_cols(n) # Sorts columns, because only one row.#> c1 c2 #> [1,] 2 1#> [[1]] #> c4 c2 #> r1 3 6 #> r3 1 4 #> r5 2 5 #> #> [[2]] #> c2 c4 #> r3 4 1 #> r5 5 2 #> r1 6 3 #># Sort rows only for first one, sort rows and columns for second one. # Row order is applied to all m's. Column order is natural. sort_rows_cols(a = list(m,m), margin = 1, roworder = list(c("r5", "r3", "r1")))#> [[1]] #> c4 c2 #> r5 2 5 #> r3 1 4 #> r1 3 6 #> #> [[2]] #> c4 c2 #> r5 2 5 #> r3 1 4 #> r1 3 6 #># Columns are sorted as default, because no colorder is given. # roworder is ignored. sort_rows_cols(a = list(m,m), margin = 2, roworder = list(c("r5", "r3", "r1")))#> [[1]] #> c2 c4 #> r3 4 1 #> r5 5 2 #> r1 6 3 #> #> [[2]] #> c2 c4 #> r3 4 1 #> r5 5 2 #> r1 6 3 #># Both columns and rows sorted, rows by the list, columns in natural order. sort_rows_cols(a = list(m,m), margin = c(1,2), roworder = list(c("r5", "r3", "r1")))#> [[1]] #> c4 c2 #> r5 2 5 #> r3 1 4 #> r1 3 6 #> #> [[2]] #> c2 c4 #> r3 4 1 #> r5 5 2 #> r1 6 3 #>