问题描述
我正在尝试计算臭氧的最大移动平均值。我写了这段代码。我想编写一个代码,当我一天中的臭氧值超过 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 个数据点的数据,以说明如何计算数量,然后过滤掉数量不足的数据。