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

R语言中按指定模式分割向量并分组拼接元素的实现问题

R 按指定模式位置分组拼接向量元素的解决方案

方案1:基于原有逻辑调整

你现有代码丢失最后一组的核心原因是没有覆盖最后一个foo位置到向量末尾的区间,只需在定位到的模式串位置向量末尾追加「向量总长度+1」作为虚拟结束边界,即可完整覆盖所有分组:

v <- c("foo", "bar1", "bar2", "foo", "bar1", "foo", "bar1", "bar2", "bar3", "foo")
# 定位所有foo的位置
b <- which(v == "foo")
# 追加虚拟结束位置,覆盖最后一组区间
b_extend <- c(b, length(v) + 1)
# 遍历所有分组拼接
result <- sapply(seq_along(b), function(x) paste0(v[b[x]:(b_extend[x+1] - 1)], collapse = ""))

方案2:高性能向量化分组方案(适配大数据量)

无需手动处理边界,也避免了显式循环,通过生成分组标识批量处理,数据量较大时效率更优:

v <- c("foo", "bar1", "bar2", "foo", "bar1", "foo", "bar1", "bar2", "bar3", "foo")
# 生成分组ID:每遇到一次foo,分组号+1
group_id <- cumsum(v == "foo")
# 按分组批量拼接元素
result <- tapply(v, group_id, paste0, collapse = "")
# 如需去掉分组名称,转为纯向量
result <- as.vector(result)

两种方案的输出均符合预期:

print(result)
# [1] "foobar1bar2"     "foobar1"         "foobar1bar2bar3" "foo"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 04:15:05