如何在R中根据Trigger列生成标记序列起止的布尔列
R实现方法
方法1:使用dplyr包(推荐,代码可读性高)
首先加载依赖包、构造示例数据:
# 加载dplyr library(dplyr) # 构造示例数据 df <- data.frame(Trigger = c(1, 1, 0, 1, 0, 1, 1))
直接通过偏移函数lag判断即可生成目标列:
df <- df %>% mutate( # 连续1序列首行判断规则:当前行Trigger为1,且上一行Trigger不为1(首行默认上一行值为0) Beginning = Trigger == 1 & lag(Trigger, default = 0) != 1, # 连续1结束后首次0的判断规则:当前行Trigger为0,且上一行Trigger为1 End = Trigger == 0 & lag(Trigger, default = 0) == 1 )
运行后输出结果和示例完全匹配:
| Trigger | Beginning | End |
|---|---|---|
| 1 | TRUE | FALSE |
| 1 | FALSE | FALSE |
| 0 | FALSE | TRUE |
| 1 | TRUE | FALSE |
| 0 | FALSE | TRUE |
| 1 | TRUE | FALSE |
| 1 | FALSE | FALSE |
方法2:Base R实现
不需要安装额外依赖包,用基础向量运算即可实现:
df <- data.frame(Trigger = c(1, 1, 0, 1, 0, 1, 1)) n <- nrow(df) # 手动构造偏移后的Trigger向量,首行补0 lag_trigger <- c(0, df$Trigger[-n]) df$Beginning <- df$Trigger == 1 & lag_trigger != 1 df$End <- df$Trigger == 0 & lag_trigger == 1
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

