在R中按3元素块将向量重组成固定行数矩阵的方法
R语言:将数值向量按3列块转换为固定行数矩阵
核心思路
把向量分割成多个长度为目标行数×3的子块,每个子块按列填充成目标行数×3的矩阵,最后将所有子块矩阵横向拼接,就能得到符合要求的格式。
通用实现代码
# 输入参数:替换为你的向量和目标行数 vec <- 1:18 target_rows <- 3 # 计算每个3列块的元素数量 block_size <- target_rows * 3 # 补全向量到块大小的整数倍(可选,避免长度不足报错) pad_length <- ((length(vec) + block_size - 1) %/% block_size) * block_size - length(vec) vec_padded <- c(vec, rep(NA, pad_length)) # 分割向量为多个块 blocks <- split(vec_padded, ceiling(seq_along(vec_padded) / block_size)) # 转换每个块为矩阵并拼接 result_matrix <- do.call(cbind, lapply(blocks, function(x) matrix(x, nrow = target_rows, ncol = 3))) # 查看结果 print(result_matrix)
示例验证
1. 3行示例(向量1:18)
设置target_rows = 3,输出:
[,1] [,2] [,3] [,4] [,5] [,6] [1,] 1 2 3 10 11 12 [2,] 4 5 6 13 14 15 [3,] 7 8 9 16 17 18
2. 4行示例(向量1:24)
设置target_rows = 4,输出:
[,1] [,2] [,3] [,4] [,5] [,6] [1,] 1 2 3 13 14 15 [2,] 4 5 6 16 17 18 [3,] 7 8 9 19 20 21 [4,] 10 11 12 22 23 24
3. 多组3行示例(向量1:36)
设置target_rows = 3,输出:
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [1,] 1 2 3 10 11 12 19 20 21 28 29 30 [2,] 4 5 6 13 14 15 22 23 24 31 32 33 [3,] 7 8 9 16 17 18 25 26 27 34 35 36
关键代码说明
split(..., ceiling(seq_along(vec)/block_size)):按指定块大小分割向量,确保每个块包含目标行数×3个元素matrix(x, nrow = target_rows, ncol = 3):默认按列填充矩阵,完全匹配示例中的元素排列逻辑do.call(cbind, ...):将所有子块矩阵横向拼接,形成最终的宽矩阵
内容的提问来源于stack exchange,提问作者chriliv
相关产品推荐
相关产品推荐

