在R中如何根据delta列连续三个1的规则获取stopping_file列对应值?
R语言:找出delta列连续三个1对应的stopping_file值
首先构造示例数据框:
df <- data.frame( stopping_file = c(14, 20, 21, 22), delta = c(6, 1, 1, 1) )
方法1:基础R原生实现
通过滑动窗口逻辑检查连续的1,定位目标位置:
# 遍历每个可能的起始位置,检查连续3个delta是否为1 consecutive_check <- sapply(1:(nrow(df)-2), function(i) all(df$delta[i:(i+2)] == 1)) # 取第一个符合条件的窗口,对应的末尾行位置 target_row <- which(consecutive_check)[1] + 2 # 提取对应stopping_file值 result <- df$stopping_file[target_row] print(result) # 输出22
方法2:使用zoo包的滑动窗口函数
借助zoo包的rollapply可以更简洁实现:
library(zoo) # 以右对齐方式生成窗口大小为3的检查结果 window_result <- rollapply(df$delta, width = 3, FUN = function(x) all(x == 1), align = "right") # 定位第一个符合条件的位置并提取对应值 result <- df$stopping_file[which(window_result)[1]] print(result) # 输出22
两种方法都会返回首次出现连续三个1时,最后一个1对应的stopping_file值。如果存在多组连续三个1的情况,代码会取第一组的末尾值。
内容的提问来源于stack exchange,提问作者polarisgirl
相关产品推荐
相关产品推荐

