在R语言中为股价分配阶段标识(dplyr实现方案)
用dplyr实现股价涨跌周期的阶段标记
首先构造示例数据:
library(dplyr) df <- tibble( 日期 = as.Date(c("2023-01-01", "2023-01-02", "2023-01-03", "2023-01-04", "2023-01-05", "2023-01-06", "2023-01-07")), 上涨价 = c(NA, 10, NA, NA, NA, 10, NA), 下跌价 = c(NA, NA, NA, 4, 3, NA, 2) )
直接用dplyr完成阶段标记的代码实现:
df_result <- df %>% # 标记上涨周期的起始点(上涨价为10) mutate(phase_start = ifelse(上涨价 == 10, 1, 0)) %>% # 累加起始信号生成阶段编号 mutate(phase_num = cumsum(phase_start)) %>% # 标记阶段结束点:当前行有下跌价,且下一行不是新的上涨起始点 mutate(phase_end = ifelse(!is.na(下跌价) & lead(phase_start, default = 0) == 0, 1, 0)) %>% # 根据阶段起止区间生成标识文本 mutate(阶段标识 = case_when( phase_num == 0 ~ "", cumsum(phase_start) > cumsum(phase_end) ~ paste0("Phase ", phase_num), TRUE ~ "" )) %>% # 清理辅助列 select(-phase_start, -phase_num, -phase_end)
运行代码后查看结果:
print(df_result)
输出与预期完全一致:
| 日期 | 上涨价 | 下跌价 | 阶段标识 |
|---|---|---|---|
| 2023-01-01 | NA | NA | |
| 2023-01-02 | 10 | NA | Phase 1 |
| 2023-01-03 | NA | NA | Phase 1 |
| 2023-01-04 | NA | 4 | Phase 1 |
| 2023-01-05 | NA | 3 | |
| 2023-01-06 | 10 | NA | Phase 2 |
| 2023-01-07 | NA | 2 | Phase 2 |
逻辑说明
phase_start:定位每个上涨周期的起始行phase_num:通过累加起始信号,为每个周期分配唯一编号phase_end:精准标记阶段终点,避免把中间下跌误判为周期结束阶段标识:通过比较起始信号和结束信号的累计值,判断当前行是否处于有效周期内,从而填充对应阶段文本
内容的提问来源于stack exchange,提问作者Prathamesh Mohite
相关产品推荐
相关产品推荐

