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

R语言识别连续3行(1,1,1)数值模式并替换首个匹配项问题

实现代码

方法1:仅使用dplyr内置函数,无需额外安装依赖

library("tidyverse")
# 构造原始数据集
d <- tibble(
  ID = c("a","a","a","a","a","a","a","a"),
  Val = c(8,7,5,4,3,2,1,0),
  outcome = c(1,0,0,1,0,1,1,1)
)

# 生成first_instance变量
d <- d %>% 
  mutate(
    # 逐行判断是否属于连续3个1的序列
    in_triple = outcome == 1 & lead(outcome, default = 0) == 1 & lead(outcome, n = 2, default = 0) == 1 |
                outcome == 1 & lag(outcome, default = 0) == 1 & lead(outcome, default = 0) == 1 |
                outcome == 1 & lag(outcome, default = 0) == 1 & lag(outcome, n = 2, default = 0) == 1,
    first_instance = ifelse(in_triple, 2, 0)
  ) %>% 
  select(-in_triple)

运行后得到的d和你给出的预期结果完全一致。

方法2:使用slider包实现更简洁的滑动窗口判断

如果可以安装额外扩展包,用slider的滑动窗口函数逻辑更清晰:

library("tidyverse")
library("slider")

d <- d %>% 
  mutate(
    in_triple = slide_lgl(outcome, ~sum(.x) == 3, .before = 1, .after = 1, .complete = TRUE),
    first_instance = ifelse(in_triple, 2, 0)
  ) %>% 
  select(-in_triple)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:42:02