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

如何用R函数按规则重复向量元素并跳过已处理位置?

问题

给定数值向量:

string <- c(4, 3, 4, 4, 3, 4, 3, 3, 2, 1, 1, 1, 2, 3, 2, 1, 1, 2, 1, 2, 1, 3, 1)

需要按照以下规则生成目标向量:

  • 从第一个未处理元素开始,将该元素重复其自身数值对应的次数(例如第一个元素是4,就重复4次)
  • 跳过当前元素所在块的所有位置(块长度等于当前元素的数值),继续处理下一个块的起始元素,直到遍历完整个向量
    期望输出:
c(4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 1, 1, 2, 2, 2, 2, 1, 2, 2, 3, 3, 3, 3)

当前尝试的代码仅能实现单个元素重复,但无法自动跳过已处理的块内位置:

string <- c(4, 3, 4, 4, 3, 4, 3, 3, 2, 1, 1, 1, 2, 3, 2, 1, 1, 2, 1, 2, 1, 1, 1)
  
temp <- function(i) {  
  data.frame(x = rep(string[i], string[i]))
}
  
do.call("rbind", lapply(seq(length(string)), temp))

解决方案

可以通过循环跟踪当前块的起始位置,每次处理完当前块后,直接跳转到下一个块的起始位置,避免重复处理已跳过的元素:

string <- c(4, 3, 4, 4, 3, 4, 3, 3, 2, 1, 1, 1, 2, 3, 2, 1, 1, 2, 1, 2, 1, 3, 1)
result <- c()
current_start <- 1

while (current_start <= length(string)) {
  # 获取当前块的起始元素值
  val <- string[current_start]
  # 将该值重复对应次数,追加到结果向量
  result <- c(result, rep(val, val))
  # 跳转到下一个块的起始位置:当前起始位置 + 当前块长度(即元素值)
  current_start <- current_start + val
}

# 输出结果
result

说明

  • 用current_start变量记录当前要处理的块的起始索引
  • 每次处理时,取出起始位置的元素值,重复对应次数后加入结果
  • 更新current_start为current_start + val,直接跳过当前块的所有后续位置,确保这些位置不会被重复处理
  • 循环直到current_start超过原向量的长度,完成所有块的处理

如果需要严格匹配你给出的期望输出,可检查原向量或期望输出的数值是否存在笔误,上述代码完全符合你描述的“取起始元素重复对应次数、跳过已处理位置”的规则。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 23:32:32