2015-11-15 2 views
1

У меня есть данные о запасах, в которых я хотел бы применить определенное логическое значение, учитывая, что в предыдущих n строках выполняется определенное предыдущее логическое значение.Как применить функцию по будущим номерам индексов - объект xts

Проблема может быть проиллюстрирована стратегией запаса: Покупать и удерживать в течение 30 дней, как это можно добиться эффективно?

В примерах данных ниже, вы можете увидеть несколько TRUE (1) значения в Signal колонки, теперь я бы, например, хотел бы сделать следующие 30 строк после идентифицированного 1 значения для 1 также. Обратите внимание, что столбец сигнала может возвращать TRUE (1) вскоре после наблюдения 1, это значение следует игнорировать и переопределять.

Таким образом, мне нужно поведение, аналогичное

  1. Найти первый 1 в колонке Signal
  2. пут 1 в следующих п строк после идентифицированного первого 1, независимо от того, если значение строки для столбца Signal 1 или 0.
  3. Сбросьте поведение, чтобы оно снова искало столбец 1 в столбце Сигнал.

Пример данных

   Open High Low Close Signal 
2012-04-13 138.80 139.60 135.90 136.40  0 
2012-04-16 136.00 141.30 135.20 139.70  1 
2012-04-17 139.40 144.90 138.50 144.00  0 
2012-04-18 139.90 140.10 135.60 136.30  0 
2012-04-19 137.20 140.00 136.40 138.00  1 
2012-04-20 137.60 141.00 136.10 141.00  0 
2012-04-23 140.00 140.10 132.70 133.90  0 
2012-04-24 133.90 138.40 133.40 138.20  0 
2012-04-25 146.00 150.00 145.10 147.20  1 
2012-04-26 149.80 149.80 144.20 146.00  0 
2012-04-27 145.50 149.80 144.00 149.00  0 
2012-04-30 148.50 150.60 147.60 150.10  0 
2012-05-01 150.10 150.10 150.10 150.10  0 
2012-05-02 151.10 151.10 147.80 148.80  0 
2012-05-03 148.60 151.20 147.90 149.20  0 
2012-05-04 148.40 149.20 140.50 143.00  0 
2012-05-07 139.90 143.10 139.00 142.60  0 
2012-05-08 142.30 142.30 137.80 138.60  0 
2012-05-09 139.20 140.40 134.60 137.60  0 
2012-05-10 139.00 141.30 136.10 140.00  0 
2012-05-11 138.70 142.50 138.20 142.50  1 
2012-05-14 140.60 141.70 135.30 136.20  0 
2012-05-15 136.80 138.70 135.70 137.70  0 
2012-05-16 135.60 136.50 132.00 135.60  0 
2012-05-17 135.60 135.60 135.60 135.60  0 
2012-05-18 132.10 134.30 129.50 130.90  0 
2012-05-21 131.50 134.90 130.30 134.40  0 
2012-05-22 135.20 139.70 133.50 138.60  0 
2012-05-23 136.10 137.30 135.00 135.90  0 
2012-05-24 137.40 140.10 135.60 137.60  0 
2012-05-25 137.30 139.00 134.00 136.70  0 
2012-05-28 137.80 141.30 137.30 139.20  0 
2012-05-29 140.00 142.70 139.50 141.50  1 

ответ

2

Есть несколько способов сделать это. Вот один (который предполагает, что ваш объект xts называется x):

n <- nrow(x) 
i <- 1 
x$Result <- x$Signal 
while(i < n) { 
    if(x$Signal[i]==1) { 
    x$Result[(i+1):(min((i+30),n))] <- 1 
    i <- min((i+31),n) 
    } else i <- i+1 
} 
Смежные вопросы