Сделайте предыдущие 360 и следующие 360 значений NA, если утверждение верно - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть информационный фрейм значений (3 года с шагом 10 минут), и я хочу, чтобы, если барьер выше 900, х получал NA за это время и чтобы предыдущие 360 и последующие 360 значений также получали NA. х и барьер содержат NA.

Мой фрейм данных состоит из: enter image description here

  • Время df $ Time <- as.POSIXct (df $ Time, формат = "% Y-% m-% d% H:% M", tz = "GMT") [10-минутные шаги] </li>
  • х мое значение, что я хочу быть отсортированы по барьеру

  • барьер если барьер превышает 900, мое значение х должно получить NA Это работает с df $ x <- ifelse (df $ барьер> 900, NA, df $ x) здесь вы можете увидеть. enter image description here

но я хочу, чтобы предыдущие 6hours = 360 также получали NA, а следующие 6hours = 360 значений x.

Вы можете видеть на картинке, что, если барьер (розовая линия) превышает 900, предыдущие и последующие значения также затрагиваются (скачки), поэтому я хочу, чтобы значения x до и после также получали NA. enter image description here

Моя проблема в том, что я не знаю, как удалить предыдущие и последующие значения x

1 Ответ

0 голосов
/ 06 сентября 2018

Возможно, вы найдете более элегантный способ, но это работает:

indeks <- df$barrier > 900
for(i in 1:360){
  if(indeks[i]==T){
    df$x[1:(i+360)] <- NA
  }
}
for(i in (360+1):(length(indeks)-361)){
  if(indeks[i]==T){
    df$x[(i-360):(i+360)] <- NA
  }
}
for(i in (length(indeks)-360):length(indeks)){
  if(indeks[i]==T){
    df$x[(i-360):lentgh(index)] <- NA
  }
}
...