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

在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-01NANA
2023-01-0210NAPhase 1
2023-01-03NANAPhase 1
2023-01-04NA4Phase 1
2023-01-05NA3
2023-01-0610NAPhase 2
2023-01-07NA2Phase 2

逻辑说明

  1. phase_start:定位每个上涨周期的起始行
  2. phase_num:通过累加起始信号,为每个周期分配唯一编号
  3. phase_end:精准标记阶段终点,避免把中间下跌误判为周期结束
  4. 阶段标识:通过比较起始信号和结束信号的累计值,判断当前行是否处于有效周期内,从而填充对应阶段文本

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 23:07:49