You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言矩阵变换:如何将奇偶行对应列元素相邻重组

解决R语言矩阵的行重组变换问题

嘿,我来帮你搞定这个矩阵变换需求!先回顾一下你的问题:我们有一个4×4的矩阵,需要把每偶数行上移,插入到前一奇数行的对应列右侧,最终得到指定结构的矩阵。

先确认原矩阵和目标结构

原矩阵定义:

text <- c(35, 1, 23, 17, 29, 3, 3, 31, 21, 15, 18, 22, 48, 0, 10, 42)
mtr <- matrix(text, nrow = 4, ncol = 4)

原矩阵内容:

[,1] [,2] [,3] [,4]
[1,]   35   29   21   48
[2,]    1    3   15    0
[3,]   23    3   18   10
[4,]   17   31   22   42

我们要把它转换成:

[,1] [,2] [,3] [,4]
[1,]   35    1   29    3
[2,]   21   15   48    0
[3,]   23   17    3   31
[4,]   18   22   10   42

实现方法:分组转置重组

核心思路是把原矩阵按两行一组拆分,对每组进行转置后再重新排列成行,最后合并两组结果。具体代码如下:

# 定义原矩阵
text <- c(35, 1, 23, 17, 29, 3, 3, 31, 21, 15, 18, 22, 48, 0, 10, 42)
mtr <- matrix(text, nrow = 4, ncol = 4)

# 将矩阵拆分为两组:前两行和后两行
group1 <- mtr[1:2, ]
group2 <- mtr[3:4, ]

# 定义一个通用变换函数,处理每组两行的矩阵
transform_group <- function(mat) {
  # 1. 转置矩阵:把两行四列变成四行两列
  # 2. 转成向量:按行提取所有元素,得到长度为8的向量
  # 3. 重新组合成2行4列的矩阵:按行填充
  matrix(as.vector(t(mat)), nrow = 2, byrow = TRUE)
}

# 对两组分别进行变换
transformed_group1 <- transform_group(group1)
transformed_group2 <- transform_group(group2)

# 合并两组结果得到最终矩阵
result <- rbind(transformed_group1, transformed_group2)

# 查看结果
print(result)

代码逻辑解释

  • 分组拆分:把4行矩阵拆成两个2行的子矩阵,分别处理前两行和后两行的配对。
  • 转置重组:以第一组为例,t(group1)会把原两行四列的矩阵转成四行两列:
    [,1] [,2]
    

[1,] 35 1
[2,] 29 3
[3,] 21 15
[4,] 48 0

接着`as.vector()`把转置后的矩阵按行转成向量:`c(35,1,29,3,21,15,48,0)`,最后用`matrix()`把这个向量重新分成2行4列,正好得到目标的前两行。
- **合并结果**:把两组变换后的矩阵上下拼接,就得到了最终的目标矩阵。

### 更简洁的写法(可选)
如果不想拆分分组,也可以用一行代码完成(逻辑和上面一致,只是把分组操作整合到索引里),还能适配更多偶数行的矩阵(比如8行、12行):
```r
result <- do.call(rbind, lapply(split(1:nrow(mtr), ceiling(1:nrow(mtr)/2)), function(i) {
matrix(as.vector(t(mtr[i, ])), nrow = 2, byrow = TRUE)
}))

内容的提问来源于stack exchange,提问作者Bourney

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:00:19