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

R语言:生成忽略指定字符的序列计数等长向量

解决R语言中忽略指定字符的连续计数问题

这需求很典型,我给你几个实用的R实现方案,轻松搞定这个等长向量的计数任务:

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

最直接的方式是利用cumsum()函数结合逻辑判断,一步到位:

# 你的原始向量
seq <- c("c","t","c","t","c","c","t","a","t", "g", "g", "c", "g", "g", "g", "a", "a", "g", "c", "-", "-", "a", "a","-", "-", "-", "c", "t", "g")
# 指定起始数
start_num <- 1000

# 第一步:标记非"-"的位置
non_dash_flag <- seq != "-"

# 第二步:计算连续计数,非"-"位置递增,"-"位置设为NA(可按需替换为其他值)
out_vec <- start_num + cumsum(non_dash_flag) - 1
out_vec[!non_dash_flag] <- NA

运行后out_vec就和seq长度完全一致:

  • 所有非"-"的位置从1000开始连续递增计数
  • "-"对应的位置会被设为NA,如果想保留"-"字符,只需把最后一行改成out_vec[!non_dash_flag] <- "-"(此时向量会变成字符类型)

tidyverse风格实现(更简洁的管道写法)

如果你习惯用tidyverse工具链,用dplyr的语法可以让代码更易读:

library(dplyr)

out_vec <- seq %>%
  # 生成计数序列
  {start_num + cumsum(. != "-") - 1} %>%
  # 将"-"对应的位置替换为NA
  replace(seq == "-", NA)

效果验证

拿你的例子来说,前19个元素都是非"-",所以对应1000到1018;第20、21位是"-",对应NA;第22、23位的"a"会接着前面的计数,变成1019、1020,以此类推,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:21:30