Я хочу создать новый столбец, а затем хочу иметь значения следующего дня в следующей строке.В моем примере-dataframe у меня есть 3 столбца: дата, цена и возврат.Теперь я хочу обнаружить чрезмерную реакцию.Если доход выше среднего стандартного отклонения + 1, то доход является чрезмерной реакцией.Если нет, то значение равно «NA».
library(tidyverse)
library(quantmod)
df <- tibble(
date = lubridate::today() +0:9,
price = c(1,2.5,2,3,5,6.5,4,9,3,4))
df <- mutate(df, return = Delt(price))
df <- df %>% mutate(overreaction=
ifelse(return > mean(df$return, na.rm = TRUE) + sd(df$return, na.rm = TRUE),
yes = return, no = NA
)
)
Теперь я создаю новый столбец, который возвращает мне результат следующего дня, если в предыдущий день произошла чрезмерная реакция.
df <- df %>% mutate(following_day =
ifelse(overreaction != "NA",
yes= return%>% data.table::shift(n=1L, fill=NA, type=c("lead")),
no=NA)
)
print(df)
# A tibble: 10 x 5
date price return overreaction following_day
<date> <dbl> <dbl> <dbl> <dbl>
1 2019-02-04 1 NA NA NA
2 2019-02-05 2.5 1.5 1.5 -0.200
3 2019-02-06 2 -0.200 NA NA
4 2019-02-07 3 0.5 NA NA
5 2019-02-08 5 0.667 NA NA
6 2019-02-09 6.5 0.3 NA NA
7 2019-02-10 4 -0.385 NA NA
8 2019-02-11 9 1.25 1.25 -0.667
9 2019-02-12 3 -0.667 NA NA
10 2019-02-13 4 0.333 NA NA
И это работает, за исключением одной проблемы: я хочу, чтобы значения в столбце следующим_днем были смещены на 1 строку, чтобы они находились в исходном положении.Вот так должен выглядеть фрейм данных:
# A tibble: 10 x 5
date price return overreaction following_day
<date> <dbl> <dbl> <dbl> <dbl>
1 2019-02-04 1 NA NA NA
2 2019-02-05 2.5 1.5 1.5 NA
3 2019-02-06 2 -0.200 NA -0.200
4 2019-02-07 3 0.5 NA NA
5 2019-02-08 5 0.667 NA NA
6 2019-02-09 6.5 0.3 NA NA
7 2019-02-10 4 -0.385 NA NA
8 2019-02-11 9 1.25 1.25 NA
9 2019-02-12 3 -0.667 NA -0.667
10 2019-02-13 4 0.333 NA NA
Может кто-нибудь мне помочь?