R语言如何将非方阵补全为填充1、支持自定义列名的方阵
R语言非方阵转方阵实现方案
示例输入矩阵
m1 <- structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 9L, 4L, 5L, 6L), .Dim = 5:4, .Dimnames = list(c("A", "B", "C", "D", "E"), c("col1", "col2", "col3", "col4")))
通用转换函数
你可以直接使用下面的封装函数完成转换,支持自定义填充值、补充列/行名称:
to_square_matrix <- function(m, fill = 1, new_col_names = NULL, new_row_names = NULL) { # 确定方阵维度 target_dim <- max(nrow(m), ncol(m)) add_row_num <- target_dim - nrow(m) add_col_num <- target_dim - ncol(m) # 补充缺失行 if (add_row_num > 0) { if (is.null(new_row_names)) { new_row_names <- paste0("virtual_row_", seq_len(add_row_num)) } row_pad <- matrix(fill, nrow = add_row_num, ncol = ncol(m), dimnames = list(new_row_names, colnames(m))) m <- rbind(m, row_pad) } # 补充缺失列 if (add_col_num > 0) { if (is.null(new_col_names)) { new_col_names <- paste0("virtual_col_", seq_len(add_col_num)) } col_pad <- matrix(fill, nrow = nrow(m), ncol = add_col_num, dimnames = list(rownames(m), new_col_names)) m <- cbind(m, col_pad) } return(m) }
调用示例
针对你的需求,补充列自定义名为anyname,调用方式如下:
res <- to_square_matrix(m1, new_col_names = "anyname") # 输出验证 dput(res)
输出结果和你给出的预期结构完全一致。
函数参数说明
m:待转换的输入矩阵fill:缺失维度的填充值,默认值为1,可按需修改为其他数值new_col_names:自定义补充列的名称,长度需和待补充的列数一致,未提供时会自动生成默认名称new_row_names:自定义补充行的名称,规则和补充列一致
内容的提问来源于stack exchange,提问作者GOGA GOGA
相关产品推荐
相关产品推荐

