我的目标是计算一个季节中发生的降雨事件,事件持续时间和事件强度(各个降雨事件中的总降雨)。 我已经做到了,但是代码只能在一个站点上运行。
我的代码在一个气象站上工作,我希望我编写的代码一次可以在所有气象站上工作,否则我必须在每个气象站上一一处理。我们可以创建一个函数(myFun)来执行或循环执行,但是我是R语言的初学者,并且从未使用过站数据,因此在现阶段对我来说这是微不足道的。当前代码为我提供了事件日期CSV的输出以及每个事件的累积总和,这对我来说足够了,但是如果它一次可以在所有电台上使用,那就太好了。
我的数据: 我有一个包含238列的csv文件,第一列对应于日期,其余237列代表每个气象站,例如ST0001是气象站ID。数据框中的121/122行代表从11月到2月的各个季节中每天的值。 NA值为-999。
代码:
library(ggplot2)
library(plotly)
data <- read.csv("1979_80.csv", header = TRUE, stringsAsFactor = FALSE,
sep = ",")
data$ST0001 = as.numeric(data$ST0001)
data$ST0001[is.na(data$ST0001)] = 0
rainingAtStart <- data$ST0001[1] >0
dif <-c(rainingAtStart,diff(data$ST0001>0))
startEvent <- which (dif>0)
endEvent <- which (dif<0)
if (data$ST0001[length(data[,1])]>0){
endEvent=c(endEvent,length(data[,1]))
}
X <- data.frame(cbind(startEvent, endEvent,
data$Date[startEvent],
data$Date[endEvent]))
names(X) <- c("indStart", "indEnd", "eventStart", "eventEnd")
precipByEvent <- apply(X,1,function(X){sum(data$ST0001[X[1]:X[2]])})
X$eventTotal <- precipByEvent
hist(precipByEvent)
summary(X)
write.csv (X, file = "ST0001_1979_80.csv")
当前代码给我一站式结果,分为五列,如下所示: 例如,一个事件。
indStart indEnd eventStart eventEnd eventTotal
13 14 11/13/1979 11/14/1979 13.5
我希望有一个csv,它具有所有237个电台的结果。