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

