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

R语言如何用str_count统计数字1与2之间的0的出现次数

实现方案

核心思路

  • 把event列的数值转为字符串,按字符匹配事件规则
  • 用正则匹配所有事件开始标记1之后的0:如果后续有结束标记2就统计到2之前的0,没有结束标记就统计到字符串末尾的所有0
  • 逐行提取所有符合规则的0的长度,得到每段事件的时长

实现代码

单向量处理

library(stringr)

# 示例数据
event <- c(1002, 100000000000000000, 10002000102000, 10000, 100000210200000000, 10020000010200000)

# 转为字符型
event_str <- as.character(event)

# 匹配计算时长
event_dur <- lapply(str_extract_all(event_str, "1(0*)(?=2|$)"), function(match_str) {
  # 去掉开头的1,剩余长度就是0的数量
  nchar(sub("^1", "", match_str))
})

# 转为空格分隔的字符串输出,和期望格式完全一致
sapply(event_dur, paste, collapse = " ")

运行输出:

[1] "2"    "17"   "3 1"  "4"    "5 1"  "2 1"

整合到DataFrame

如果要把结果添加到原数据框中,可以用dplyr处理:

library(dplyr)
library(stringr)

# 假设你的数据框名为df
df <- data.frame(event = event) %>%
  mutate(
    event_dur = lapply(str_extract_all(as.character(event), "1(0*)(?=2|$)"), 
                       \(x) nchar(sub("^1", "", x))),
    # 可选:转为空格分隔的字符串列
    event_dur_str = sapply(event_dur, paste, collapse = " ")
  )

规则说明

  • 正则1(0*)(?=2|$)通过正向预查,严格匹配事件开始1后的有效0段,自动忽略2之后的无效0
  • 支持单行多事件的场景,会按顺序输出每段事件的时长
  • 自动兼容只有开始标记1没有结束标记2的未结束事件,统计所有后续0的长度

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 06:09:01