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

如何在R语言中根据字符串向量生成递增数值向量?

问题

给定如下字符串向量:

strings_input <- c("a", "a", "b", "b", "b", "c", "c", "a", "b", "b")

需要将其转换为按连续相同元素块递增编号的数值向量,预期结果为:

expected_output <- c(1, 1, 2, 2, 2, 3, 3, 4, 5, 5)
解决方案

基础R实现(无需额外包)

利用R内置的rle()函数(游程编码)就能快速实现:

# 对输入向量做游程编码
run_info <- rle(strings_input)
# 生成每个连续块的编号,并按块长度重复
result <- rep(seq_along(run_info$values), run_info$lengths)

# 查看结果
result
#> [1] 1 1 2 2 2 3 3 4 5 5

原理说明:

  • rle()会返回包含两个元素的列表:values是连续重复的唯一元素(此处为c("a", "b", "c", "a", "b")),lengths是每个元素连续出现的次数(此处为c(2, 3, 2, 1, 2))。
  • seq_along(run_info$values)为每个连续块生成从1开始的递增编号,再通过rep()按块的长度重复对应编号,最终得到目标向量。

简洁实现(用data.table包)

如果习惯用data.table,它的rleid()函数可以一步到位:

library(data.table)
result <- rleid(strings_input)

这个函数专门用于生成连续重复组的ID,输出结果和基础方法完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 09:15:33