Как определить последовательности увеличения цены 5 раз подряд?

#r #dplyr #seq

#r #dplyr #seq #продолжение

Вопрос:

У меня есть столбец ежедневных цен на акции за последние 3 года. Теперь я хотел бы найти последовательности, в которых цена увеличилась 5 раз подряд, а затем создать новый столбец, в котором я установил «купить». Кто-нибудь может мне помочь, как сгенерировать это?

Это то, что я пробовал, но, пожалуйста, извините, если это не имеет большого значения, потому что я новичок

 x <- FB[,"Close"] if (x<x 1, x 1<x 2, x 2<x 3, x 3<x 4, x 4<5) { FB$buy <- 1 } 
  

Комментарии:

1. не могли бы вы поделиться с нами кодом, который вы пробовали до сих пор

2. x <- FB[,»Закрыть»] если (xпробовал, но, пожалуйста, извините, если это не имеет большого значения, потому что я новичок

3. извините, я не понял, лучше всего отредактировать свой пост и поместить туда код. Используйте code markdown для наглядности, в окне редактирования есть информация о том, как это сделать

4. Я получаю это сообщение, когда хочу его отредактировать: «Похоже, что ваш пост содержит код, который неправильно отформатирован как код». Спасибо за вашу готовность помочь, но мне нужно сдаться :/

5. Я отредактировал ваш вопрос, пожалуйста, посмотрите, как я пометил ваш код (обратные тройные тики), чтобы вы знали, что делать в следующий раз

Ответ №1:

В вашем теге для этого поста сказано dplyr , что я предоставлю dplyr метод вместо базового R метода. Это метод грубой силы, но ему должно быть довольно легко следовать.

 library(dplyr) 

FB <- data.frame(
  "Close" = c(1,2,3,4,5,6,1,2,3,4,1,2,3,4,5,6),
  stringsAsFactors = FALSE
)

# Brute Force dplyr
x <- FB %>%
  mutate(buy = Close>lag(Close,1) amp; 
           lag(Close,1)>lag(Close,2) amp; 
           lag(Close,2)>lag(Close,3) amp; 
           lag(Close,3)>lag(Close,4) amp; 
           lag(Close,4)>lag(Close,5)
         ) %>%
  # If you really need a 1 instead of a True
  mutate(buy = as.numeric(buy)) # %>%
  # If there weren't 5 previous the result is NA
  # and you can impute something that makes sense
  # if anything makes sense.
  # mutate(buy = ifelse(is.na(buy),0,buy))
x
# Close buy
#     1  NA
#     2  NA
#     3  NA
#     4  NA
#     5  NA
#     6   1
#     1   0
#     2   0
#     3   0
#     4   0
#     1   0
#     2   0
#     3   0
#     4   0
#     5   0
#     6   1
  

Комментарии:

1. Большое тебе спасибо, Адам!! С наилучшими пожеланиями из Швейцарии