【问题标题】:if-else conditions depending on previous valueif-else 条件取决于先前的值
【发布时间】:2015-05-29 07:36:24
【问题描述】:

我想创建一个向量z,它只包含 1 或 -1。是否需要 1 或 -1 取决于 RSI 的值:

如果 RSI 大于 70,则 z 应为 -1
如果 RSI 小于 30,则 z 应为 1

对于所有其他情况:z 应与之前的 z 具有相同的编号。
这意味着z = z(t-1)

RSI 是一个包含 0 到 100 之间数字的向量。到目前为止,我使用了 ifelse 条件。

rsi <- RSI(YENDOL, n=14)

z <- 0

z <- ifelse(rsi >= 70,-1,z)
z <- ifelse(rsi <= 30,1,z)

有了这个,我创建了一个包含 0、1 和 -1 的 z 向量。下一步是根据先前的值(z t-1) 将零更改为 1 或 -1。这就是我卡住的地方。稍后我需要将向量与另一个向量相乘。

【问题讨论】:

  • 您可以通过idx &lt;- which(z == 0) 获得0s 的索引。从那里,您可以使用例如引用以前的值z[idx] &lt;- ifelse(rsi[idx-1] &gt;= 70,-1, 0)。 (对于第一个值为 0 的值会引发错误,因为没有索引 idex-1=0-1-=-1)。
  • 您也可以考虑使用 dplyr 包中的 lag 函数。

标签: r if-statement


【解决方案1】:

使用来自zoo 包的na.locf,例如:

library(zoo)

#data
set.seed(123)
rsi <- round(runif(10,0,100))
rsi
#[1] 29 79 41 88 94  5 53 89 55 46

#apply condition to set -1 and 1
z <- ifelse(rsi >= 70,-1, ifelse(rsi <= 30,1,NA))
z
#[1]  1 -1 NA -1 -1  1 NA -1 NA NA

#Then use zoo function to fill in the NAs with previous non NA value
z <- na.locf(z)
z
#[1]  1 -1 -1 -1 -1  1  1 -1 -1 -1

【讨论】:

    猜你喜欢
    • 2016-10-05
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    • 2012-10-03
    • 2022-01-21
    • 1970-01-01
    • 2019-09-19
    • 1970-01-01
    相关资源
    最近更新 更多