Ваш вопрос все еще неясен, но если я правильно понял, вам нужно не создать новую переменную, а выбрать дни вокруг каждого вхождения APP. Я отправляю новый ответ, так как это другой вопрос.
Чтение данных вашего примера:
df <- read.table( text = c('
Date APP DE10
2014-09-22 0 1.010
2014-09-19 0 1.043
2014-09-18 0 1.081
2014-09-17 0 1.050
2014-09-16 0 1.061
2014-09-15 0 1.067
2014-09-12 1 1.082
2014-09-11 0 1.041
2014-09-10 0 1.047
2014-09-09 0 0.996
2014-09-08 0 0.953
2014-09-05 0 0.928
2014-09-04 1 0.970
2014-09-03 0 0.955
2014-09-02 0 0.931
2014-09-01 0 0.882' ),
header = TRUE )
Теперь определите, где у вас есть приложения, и соберите данные. Конечно, есть более элегантные способы сделать это, но это подойдет. Он создаст новый data.frame со всем необходимым для ваших графиков:
# Itentify the rows where APP is 1:
APProws <- as.numeric(rownames( df[ df[,'APP'] == 1, ] ))
# An empty data.frame to receive the data:
APP.df <- data.frame(
Event = rep(NA, length(APProws)*7),
Date = as.Date('2000-12-31'),
DE10 = NA,
Indicator = NA )
n <- 0
for( i in APProws ) {
rows <- (n*7+1):(n*7+7)
APP.df$Event[rows] <- paste('Event', n+1)
APP.df$Date[rows] <- df$Date[(i-3):(i+3)]
APP.df$DE10[rows] <- df$DE10[(i-3):(i+3)]
APP.df$Indicator[n*7+4] <- '1'
n <- n+1
}; rm(i, n, rows)
Теперь у вас есть все необходимое для вашего сюжета.
library(ggplot2)
ggplot(APP.df, aes(Date, DE10)) +
geom_line() +
geom_vline(
data = subset(APP.df, Indicator == 1),
aes(xintercept = as.numeric(Date)),
color = 'red' ) +
facet_grid( ~Event, scales = 'free_x')
![enter image description here](https://i.stack.imgur.com/lwhGA.png)
Если это то, что вам нужно, я настоятельно рекомендую вам отредактировать заголовок вашего поста, поскольку он вводит в заблуждение. Опишите, что вы пытаетесь достичь, а не то, как вы думаете, это способ добраться туда.