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
相关产品推荐
相关产品推荐

