knitr::opts_chunk$set(echo = TRUE)
Installing the latest stable version (from CRAN):
install.packages("hydroTSM")
\noindent Alternatively, you can also try the under-development version (from Github):
if (!require(devtools)) install.packages("devtools") library(devtools) install_github("hzambran/hydroTSM")
library(hydroTSM)
data(SanMartinoPPts)
x <- window(SanMartinoPPts, start=as.Date("1985-01-01"))
( m <- daily2monthly(x, FUN=sum) )
dates <- time(x)
( nyears <- yip(from=start(x), to=end(x), out.type="nmbr" ) )
1) Summary statistics
smry(x)
hydroplot(x, var.type="Precipitation", main="at San Martino", pfreq = "dm", from="1987-01-01")
2) Amount of days with information (not \texttt{NA}) per year
dwi(x)
3) Amount of days with information (not \texttt{NA}) per month per year
dwi(x, out.unit="mpy")
4) Plotting the monthly precipitation values for each year, useful for identifying dry/wet months.
# Daily zoo to monthly zoo m <- daily2monthly(x, FUN=sum, na.rm=TRUE) # Creating a matrix with monthly values per year in each column M <- matrix(m, ncol=12, byrow=TRUE) colnames(M) <- month.abb rownames(M) <- unique(format(time(m), "%Y")) # Plotting the monthly precipitation values require(lattice) print(matrixplot(M, ColorRamp="Precipitation", main="Monthly precipitation at San Martino st., [mm/month]"))
Annual values of precipitation
daily2annual(x, FUN=sum, na.rm=TRUE)
Average annual precipitation
Obvious way:
mean( daily2annual(x, FUN=sum, na.rm=TRUE) )
Another way (more useful for streamflows, where FUN=mean
):
The function annualfunction applies FUN
twice over x
:
( i) firstly, over all the elements of x
belonging to the same year, in order to obtain the corresponding annual values, and
(ii) secondly, over all the annual values of x
previously obtained, in order to obtain a single annual value.
annualfunction(x, FUN=sum, na.rm=TRUE) / nyears
Median of the monthly values at station 'x'. Not needed, just for looking at these values in the boxplot.
monthlyfunction(m, FUN=median, na.rm=TRUE)
Vector with the three-letter abbreviations for the month names
cmonth <- format(time(m), "%b")
Creating ordered monthly factors
months <- factor(cmonth, levels=unique(cmonth), ordered=TRUE)
Boxplot of the monthly values
boxplot( coredata(m) ~ months, col="lightblue", main="Monthly Precipitation", ylab="Precipitation, [mm]", xlab="Month")
Average seasonal values of precipitation
seasonalfunction(x, FUN=sum, na.rm=TRUE) / nyears
Extracting the seasonal values for each year
( DJF <- dm2seasonal(x, season="DJF", FUN=sum) ) ( MAM <- dm2seasonal(m, season="MAM", FUN=sum) ) ( JJA <- dm2seasonal(m, season="JJA", FUN=sum) ) ( SON <- dm2seasonal(m, season="SON", FUN=sum) )
Plotting the time evolution of the seasonal precipitation values
hydroplot(x, pfreq="seasonal", FUN=sum, stype="default")
Common steps for the analysis of this section:
Loading daily precipitation data at the station San Martino di Castrozza, Trento Province, Italy, with data from 01/Jan/1921 to 31/Dec/1990.
data(SanMartinoPPts)
Selecting only a three-year time slice for the analysis
x <- window(SanMartinoPPts, start=as.Date("1988-01-01"))
Plotting the selected time series
hydroplot(x, ptype="ts", pfreq="o", var.unit="mm")
Counting and plotting the number of days in the period where precipitation is > 10 [mm]
( R10mm <- length( x[x>10] ) )
wet.index <- which(x >= 1)
( PRwn95 <- quantile(x[wet.index], probs=0.95, na.rm=TRUE) )
Note 1: this computation was carried out for the three-year time period 1988-1990, not the 30-year period 1961-1990 commonly used.
Note 2: missing values are removed from the computation.
(very.wet.index <- which(x >= PRwn95))
( R95p <- sum(x[very.wet.index]) )
Note 3: this computation was carried out for the three-year time period 1988-1990, not the 30-year period 1961-1990 commonly used
Computing the 5-day total (accumulated) precipitation \newline
x.5max <- rollapply(data=x, width=5, FUN=sum, fill=NA, partial= TRUE, align="center") hydroplot(x.5max, ptype="ts+boxplot", pfreq="o", var.unit="mm")
Maximum annual value of 5-day total precipitation
(x.5max.annual <- daily2annual(x.5max, FUN=max, na.rm=TRUE))
Note 1: for this computation, a moving window centred in the current day is used. If the user wants the 5-day total precipitation accumulated in the 4 days before the current day + the precipitation in the current day, the user have to modify the moving window.\newline
Note 2: For the first two and last two values, the width of the window is adapted to ignore values not within the time series
Since v0.5-0, hydroTSM
includes a function to plot a climograph, considering not only precipitation but air temperature data as well:
# Loading daily ts of precipitation, maximum and minimum temperature data(MaquehueTemuco) # extracting individual ts of precipitation, maximum and minimum temperature pcp <- MaquehueTemuco[, 1] tmx <- MaquehueTemuco[, 2] tmn <- MaquehueTemuco[, 3] # Plotting the climograph m <- climograph(pcp=pcp, tmx=tmx, tmn=tmn, na.rm=TRUE)
This tutorial was built under:
sessionInfo()$platform sessionInfo()$R.version$version.string paste("hydroTSM", sessionInfo()$otherPkgs$hydroTSM$Version)
In order to make easier the use of \texttt{hydroTSM} for users not familiar with R, in this section a minimal set of information is provided to guide the user in the R world.
?read.table
, ?write.table
: allow the user to read/write a file (in $~$table format) and create a data frame from it. Related functions are ?read.csv
, ?write.csv
, ?read.csv2
, ?write.csv2
.
foreign: read data stored in several R-external formats (dBase, Minitab, S, SAS, SPSS, Stata, Systat, Weka, ...)
?zoo::read.zoo
, ?zoo::write.zoo
: functions for reading and writing time series from/to text files, respectively.
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.