2015-05-29 5 views
3

Я хочу создать вектор z который содержит только 1 или -1. Если 1 или -1, требуются зависят от Значения RSI:if-else условия в зависимости от предыдущего значения

Если RSI больше, чем 70, г должен быть -1
Если RSI меньше 30, г должны быть 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) 

С этим я создал z вектор, содержащий 0, 1 и -1. Следующим шагом было бы изменить нули на 1 или -1 в зависимости от предыдущего значения (z t-1). Это то место, где я застрял. Мне нужен вектор позже, чтобы умножить его на другой вектор.

+1

Вы получаете указатели на '' 0's с IDX <- который (г == 0) '. Оттуда вы можете ссылаться на предыдущие значения, используя, например, 'z [idx] <- ifelse (rsi [idx-1]> = 70, -1, 0)'. (Выпустил бы ошибку для первого значения, имеющего 0, потому что нет индекса idex-1 = 0-1 - = - 1). – lukeA

+1

Вы также можете использовать функцию 'lag' из пакета dplyr. –

ответ

4

Использование na.locf из zoo пакета, например:

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