目前,我正在进行河流流量数据分析。我有从1935年到现在的每日出院记录。我想提取每个水文年的年最大流量(从01/11开始到明年31/10)。但是,我发现hydroTSM包只能处理自然年。我试着使用“动物园”包,但我发现它很难计算,因为每年都有不同的日子。有谁知道吗?谢谢.
数据看起来像:
01-11-1935 663
02-11-1935 596
03-11-1935 450
04-11-1935 381
05-11-1935 354
06-11-1935 312
我的代码:
mydata<-read.table("discharge")
colnames(mydata) <- c("date","discharge")
library(zoo)
z<-zooreg(mydata[,2],start=as.Date("1935-11-1"))
mydta$date <- as.POSIXct(dat$date)
q.month<-daily2monthly(z,FUN=max,na.rm = TRUE,date.fmt = "%Y-%m-%d",out.fmt="numeric")
q.month.plain=coredata(q.month)
z.month<-zooreg(q.month.plain,start=1,frequency=12)
4条答案
按热度按时间kmbjn2e31#
对于存储在类
Date
的vector中的日期,您可以使用cut()
和tapply()
,如下所示:e0uiprwp2#
这里有一行代码可以做到这一点。
首先将日期转换为
"yearmon"
类。这个类表示一年一个月,表示一年的整数部分和一个月的小数部分(Jan = 0,Feb = 1/12,等等)。加上2/12将11月移到1月,然后截断为给予正好的年份。总的来说。虽然我们使用的测试数据从水电年年初开始 ,但即使数据不是从水电年年初开始,该解决方案也有效。这给出:
lyfkaqu13#
尝试
xts
包,它与zoo
一起工作:hc2pp10m4#
您可以使用
lfstat
包中的apply.seasonal
函数,该函数对xts
对象进行操作。用一句话解决你的问题:
origin = 11
表示水文年将从11月开始。