R语言中买卖信号优化需求:调整信号序列规则
调整R语言中的买卖信号序列
我清楚你要实现的需求:当信号序列里出现0之后,在第一次遇到1之前的所有0都要替换成-1。下面是一个简洁高效的R实现方案,完全匹配你的预期逻辑:
核心思路
我们需要追踪序列的状态变化来精准控制替换逻辑:
- 初始状态为未触发替换
- 当遇到第一个0时,切换到需要替换0为-1的模式
- 当遇到第一个1时,切换回未触发替换的模式
- 后续再出现0时,重复上述的触发-替换-关闭流程
R代码实现
# 你的原始信号序列 signal <- c(-1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, -1, -1, -1, -1, 0, 0, 0, 0, 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, -1, -1, -1, -1, -1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1) # 初始化调整后的信号和状态变量 adjusted_signal <- signal replace_mode <- FALSE # 遍历序列执行替换逻辑 for (i in seq_along(adjusted_signal)) { current_val <- adjusted_signal[i] if (current_val == 0 && !replace_mode) { # 首次遇到0,开启替换模式 replace_mode <- TRUE } else if (current_val == 1 && replace_mode) { # 遇到第一个1,关闭替换模式 replace_mode <- FALSE } else if (current_val == 0 && replace_mode) { # 替换模式下,将0转为-1 adjusted_signal[i] <- -1 } } # 查看调整后的结果 print(adjusted_signal)
代码细节解释
- 先复制原始信号到
adjusted_signal,避免直接修改原数据 replace_mode作为状态开关,标记当前是否需要替换0为-1- 遍历过程中精准控制状态切换:
- 第一次碰到0时开启替换,后续的0全部转成-1
- 碰到第一个1时立即关闭替换,后续的0会重新触发新的替换周期
按照你的示例,原始序列开头的-1 -1 ... -1 0 0 0 0 1会被调整为-1 -1 ... -1 0 -1 -1 -1 1,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Sarath_Mj
相关产品推荐
相关产品推荐

