zoo time series exercises

May 30, 2016

(This article was first published on R-exercises, and kindly contributed to R-bloggers)

DallasZooEntryPlazaThe zoo package consists of the methods for totally ordered indexed observations. It aims at performing calculations containing irregular time series of numeric vectors, matrices & factors. The zoo package interfaces to all other time series packages on CRAN. This makes it easy to pass the time series objects between zoo & other time series packages. The zoo package is an infrastructure that tries to do all basic things well, but it doesn’t provide modeling functionality. The below set of exercises makes you understand some of zoo concepts.

The initial environment setup required to work on these exercises is as follows.

Install zoo package – install.packages("zoo")
Attach the package – require("zoo")
Download the Dataset – ZooData
read.table(Filepath, header = TRUE, sep=",",stringsAsFactors = FALSE) -> inData

Answers to the exercises are available here.

Exercise 1
Coerce the inData object as zoo object into wZ.
Check the class of the object wZ
Observe the index of the object wZ .

Exercise 2
Create a zoo object Z from the inData with ‘Date’ column as the index

Exercise 3
Get the ratio of Z$DeliveryVolume to Z$TotalVolume
Did you get the non-numeric operation error ? There is a small catch to remember, Zoo objects need to be a matrix. If there is a character string in at least one of the values, the complete Zoo object is considered as matrix of ‘character’ type. Now make a numeric zoo object, create Zoo object Z with only numeric columns from inData

Create a Zoo object (Z) with inData[3:10] with index as Date Column
Extract only the data (without index) of zoo object Z
Get the ratio of Z$Deliverable.Qty to Z$Total.Traded.Quantity

Exercise 4
Get the mean of Z$DeliveryVolume to Z$TotalVolume per quarter, by using Aggregate function.
as.yearqtr – function returns the Quarter of a given date.
Get the mean of Z$DeliveryVolume to Z$TotalVolume per month, by using Aggregate function.
as.yearmon – function returns the Year Month of a given date.

Exercise 5
Create Z1 object with only price related columns (Date as index). Cols – 3:6
Create Z2 with all other quantity related columns (Date as index). Cols – 3,8:10
Merge the objects Z1 & Z2 to Z3
check if merged output Z3 is same as Z

Exercise 6
Extract only the rows from 2015-Feb-01 to 2015-Feb-15 from Zoo object Z

Exercise 7

Volume Weighted Average Price (VWAP) = Sum of (Price * Volume)/Sum of Volume
myVwap <- function (x) {

Find VWAP with Close as Price, TotalVolume as Volume with data of 5 prior days. Store the result in object ZT
e.g. Find the VWAP of 2015-01-07 with 2015-Jan-01 to 2015-01-07.
Find VWAP with Close as Price, DeliveryVolume as Volume with data of 5 prior days. Store the result object ZD
Merge the objects Z with ZT, ZD and save result in R

Exercise 8
Replace the NAs in R[,"ZT"] with the monthly mean of ZT
e.g. NAs of Jan month in R[,"ZT"] should be replaced with Jan months mean of R[,"ZT"]

Exercise 9
Subtract the mean of each month’s VWAP ZT from close price of each R row

Exercise 10
Check the rownames of object Z .
Surprised, to see NULL ?, Zoo object stores the index separately and if you want to retrieve use index function.Now, you know how to get index and data, make a data frame DT from Zoo object Z , with all the columns of Z + new column dt, which contains the date of each row.

Image by Kevin1086 (Own work) [CC BY-SA 3.0], via Wikimedia Commons.

To leave a comment for the author, please follow the link and comment on their blog: R-exercises.

R-bloggers.com offers daily e-mail updates about R news and tutorials on topics such as: Data science, Big Data, R jobs, visualization (ggplot2, Boxplots, maps, animation), programming (RStudio, Sweave, LaTeX, SQL, Eclipse, git, hadoop, Web Scraping) statistics (regression, PCA, time series, trading) and more...

If you got this far, why not subscribe for updates from the site? Choose your flavor: e-mail, twitter, RSS, or facebook...

Comments are closed.


Never miss an update!
Subscribe to R-bloggers to receive
e-mails with the latest R posts.
(You will not see this message again.)

Click here to close (This popup will not appear again)