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

R语言实现矩阵各连续行依次向右循环移位1个位置

R语言实现矩阵逐行循环移位操作

你需要实现的效果为逐行递进循环右移:首行保持a b c d e原顺序,后续每一行相对上一行整体右移1位,行尾溢出的元素补到行首,无需手动逐元素赋值,两种常用实现方式如下:

向量化实现(无循环,执行效率更高)

利用R的向量索引和取模运算直接构造目标矩阵,适合大维度矩阵场景:

# 定义基础序列与矩阵维度
base_seq <- letters[1:5]
row_num <- 3
col_num <- length(base_seq)

# 按移位规则生成每一行内容
result_mat <- t(sapply(0:(row_num - 1), function(shift_val){
  # 计算右移shift_val位对应的列索引
  col_index <- (1:col_num - shift_val - 1) %% col_num + 1
  base_seq[col_index]
}))

# 打印结果
print(result_mat)

运行输出与预期完全一致:

[,1] [,2] [,3] [,4] [,5]
[1,] "a"  "b"  "c"  "d"  "e" 
[2,] "e"  "a"  "b"  "c"  "d" 
[3,] "d"  "e"  "a"  "b"  "c"

循环实现(逻辑直观易理解)

如果更习惯循环写法,可以从第二行开始逐行基于上一行的内容做移位,代码可读性更强:

# 生成原始矩阵
ori_mat <- matrix(data = rep(letters[1:5], 3), nrow = 3, ncol = 5, byrow = TRUE)
col_num <- ncol(ori_mat)

# 从第二行开始逐行移位
for (i in 2:nrow(ori_mat)) {
  prev_row <- ori_mat[i-1, ]
  # 取上一行最后一个元素,拼接上一行除最后一个元素外的内容,实现右移1位
  ori_mat[i, ] <- c(prev_row[col_num], prev_row[-col_num])
}

# 打印结果
print(ori_mat)

两种方式输出结果完全一致,如果需要调整移位方向为左移,只要把拼接逻辑改为「上一行第一个元素拼接到上一行除第一个元素外的内容末尾」即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 10:51:21