##This script produces average wind speeds and directions with the calculations of consistancy and mean direction being based on the means of u,v, and s: sdat<-allhly$spd ddat<-allhly$dir hr<-allhly$hr i<-1 C<-3.1415/180 C2<-(-1000/3600) C3<-180/3.1415 #split into componant vectors: v<-sdat*C2*cos(ddat*10*C) u<-sdat*C2*sin(ddat*10*C) #Calculate hourly means for v and u: value<-split(v,hr) vMean<-sapply(value,mean,na.rm=T) value<-split(u,hr) uMean<-sapply(value,mean,na.rm=T) #Scalor average (speed) s<-sdat*1000/3600 value<-split(s,hr) sMean<-sapply(value,mean,na.rm=T) #vector average (velocity) vVec<-sqrt((uMean*uMean)+(vMean*vMean)) cons<-(vVec/sMean) #Direction: #remove calms from u and v: i<-1 for(i in 1:length(s)) if (sdat[i]==0){ v[i]<-NA u[i]<-NA } #re-calculate means for u and v: value<-split(v,hr) v2Mean<-sapply(value,mean,na.rm=T) value<-split(u,hr) u2Mean<-sapply(value,mean,na.rm=T) C3<-180/pi i<-1 d=matrix(data=NA,nrow=length(v2Mean),ncol=1) for(i in 1:length(v2Mean)) if((u2Mean[i]>0) && (v2Mean[i]>=0)){ d[i,]<-180 +(90-C3*atan(v2Mean[i]/u2Mean[i])) }else{ if((u2Mean[i]<0) && (v2Mean[i]>=0)){ d[i,]<-(270+C3*atan(-v2Mean[i]/u2Mean[i]))-180 }else{ if((u2Mean[i]<0) && (v2Mean[i]<0)){ d[i,]<-(279-(C3*atan(v2Mean[i]/u2Mean[i]))-180) }else{ d[i,]<-180+(90+C3*atan(-v2Mean[i]/u2Mean[i])) } } } #writing values out to a file: temp<-matrix(data=NA,nrow=24,ncol=5) i<-1 for(i in 1:24){ temp[i,]<-c(i,sMean[i],vVec[i],cons[i],d[i]) } write.table(temp,file="temp.txt",col.names=c("hr","scalorM","vectorM","cons","dirMean"), row.names=F)