计算超过 18 小时的臭氧值的最大移动平均值

问题描述

我正在尝试计算臭氧的最大移动平均值。我写了这段代码。我想编写一个代码,当我一天中的臭氧值超过 18 小时时计算移动平均值。怎么写?
我写的代码是真的还是假的?

Data= data.frame(Date=rep(seq.Date(as.Date("2013-03-21"),by=1,length.out = 2),each=24),Time=c(0:23),o3= (c(1:43,NA,NA)))

Unique_DATE = na.omit( unique( Data[,1] ) ) 

COUNT = c()
for( i in 1:length( Unique_DATE ) ){
  
  
  COUNT[i] = 24-sum( is.na( Data[ Data[,1] == Unique_DATE[i],3 ] ) )
  
}

mean(COUNT>=18)


library( forecast )

MAX_MOVING_AVERAGE = c()


for( i in 1:length( Unique_DATE ) ){
  
  
  MAX_MOVING_AVERAGE[i] = 
    max(  ma(   Data[ Data[,3 ],order=8 ),na.rm = TRUE )
  
  
}


MAX_MA=data.frame( Unique_DATE,MAX_MOVING_AVERAGE  )


解决方法

您可以使用 dplyr 并将代码缩减为更小的代码。

Data <- data.frame(Date=rep(seq.Date(as.Date("2013-03-21"),by=1,length.out = 3),each=24),Time=c(0:23),o3= 
     (c(1:43,NA,1:12,NA)))

library(forecast)
library(dplyr)
summary_all <-
    Data %>% 
    dplyr::group_by(Date) %>% 
    dplyr::summarize(max_ma=max(ma(o3,order=8),na.rm=T),count=sum(!is.na(o3)))

summary <- summary_all %>% dplyr::filter(count >= 18)

summary
# A tibble: 2 x 3
  Date       max_ma count
  <date>      <dbl> <int>
1 2013-03-21     20    24
2 2013-03-22     39    19

我又添加了一天内少于 18 个数据点的数据,以说明如何计算数量,然后过滤掉数量不足的数据。