Спасибо, это гораздо проще понять, чем оригинал. Если у вас есть только несколько событий, это сработает для создания нужного вам графика:
library(tidyverse)
library(lubridate)
Я читаю ваши данные как фрейм данных dd
. Сначала преобразовали Date
в тип Date
, а затем определили даты события:
> dd$Date <- as.Date(dd$Date)
> events <- dd %>% filter(APP==1) %>% select(Date)
> events$Date
[1] "2014-09-12" "2014-09-04"
Далее используйте эти даты, чтобы создать один новый столбец разниц в датах для каждого события:
diffs <- dd %>%
mutate(Event1_DE10=-interval(ymd(dd$Date),ymd(events$Date[1])) %/% days(1)) %>%
mutate(Event2_DE10=-interval(ymd(dd$Date),ymd(events$Date[2])) %/% days(1))
Это даст вам:
> diffs
# A tibble: 16 x 5
Date APP DE10 Event1_DE10 Event2_DE10
<date> <int> <dbl> <dbl> <dbl>
1 2014-09-22 0 1.01 10. 18.
2 2014-09-19 0 1.04 7. 15.
3 2014-09-18 0 1.08 6. 14.
4 2014-09-17 0 1.05 5. 13.
5 2014-09-16 0 1.06 4. 12.
6 2014-09-15 0 1.07 3. 11.
7 2014-09-12 1 1.08 0. 8.
8 2014-09-11 0 1.04 -1. 7.
9 2014-09-10 0 1.05 -2. 6.
10 2014-09-09 0 0.996 -3. 5.
11 2014-09-08 0 0.953 -4. 4.
12 2014-09-05 0 0.928 -7. 1.
13 2014-09-04 1 0.970 -8. 0.
14 2014-09-03 0 0.955 -9. -1.
15 2014-09-02 0 0.931 -10. -2.
16 2014-09-01 0 0.882 -11. -3.
Вы можете наложить линии, по одной для каждого события, а затем вертикальную линию в конце:
diffs %>% ggplot() +
geom_line(aes(x=Event1_DE10,y=DE10), color="blue") +
geom_line(aes(x=Event2_DE10,y=DE10), color="red") +
geom_vline(xintercept=0, linetype="dashed")
Это выглядит так:
![enter image description here](https://i.stack.imgur.com/7E6GP.jpg)
Если вы хотите, чтобы от -3 до +3 по оси x, просто добавьте знак плюс в конец кода выше и scale_x_continuous(limits=c(-3,3))
, чтобы разделить график в этих пределах x.
Если у вас больше нескольких дат, вам может потребоваться настроить часть mutate
так, чтобы она давала новый столбец для всех дат событий в events$Date
.
Чтобы увеличить масштаб графика, но не обрезать данные за пределами границ оси, используйте coord_cartesian
:
diffs %>% ggplot() +
geom_line(aes(x=Event1_DE10,y=DE10), color="blue") +
geom_line(aes(x=Event2_DE10,y=DE10), color="red") +
geom_vline(xintercept=0, linetype="dashed") +
labs(x="Days from Event") +
coord_cartesian(xlim=c(-3,3))
![enter image description here](https://i.stack.imgur.com/pY2mJ.jpg)