如果语句为真,则使前一个360和后面的360值为NA

问题描述 投票:0回答:1

我有一个数据框的值(3年10分钟步骤),我希望如果屏障高于900,那时x得到NA,前一个360和后面的360值也得到NA。 x和屏障包含NA。

我的数据框由以下组成:enter image description here

  • 时间df $时间< - as.POSIXct(df $时间,格式=“%Y-%m-%d%H:%M”,tz =“GMT”)[10分钟步骤]
  • x我的价值我希望被障碍整理出来
  • 屏障如果屏障超过900我的x值应该得到NA这适用于df $ x < - ifelse(df $ barrier> 900,NA,df $ x),你可以看到。 enter image description here

但我想要的是,之前的6小时= 360值也应该得到NA以及随后的6小时= 360的x值。

你可以在图片上看到,如果屏障(粉红色线)超过900,前一个和后面的值也会受到影响(跳跃),因此我希望前后的x值也是NA。 enter image description here

我的问题是我不知道如何删除x的前一个和后一个值

r loops if-statement time posixct
1个回答
0
投票

您可以找到更优雅的方式,但这有效:

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
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.