Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

A common scenario that I run into is time and how to deal with it. I often will do a  variety of summaries and analysis that need to be measured at different points in time. Whether I want to graph the data or review the results I need to be able to perform measurements relative to time and interpret the time output in human readable form. R has several functions to handle those time related scenario.

For starters one thing needs to be acknowledged. On Unix based system the beginning of time is January 1, 1970. At that moment exactly zero (0) seconds have passed and it is known as Unix epoch. Anything before that is negative and anything after that time is positive. This measure of time is defined in seconds.

This piece of code shows the Unix epoch and how it compares to the current time.  In this example the origin is zero (0) but as one can see it can easily be changed to calculate the length of time that has past since any given time.

##Local Time in EDT (GMT-5). If local time IS GMT then the date would be January 1, 1970
iso <- ISOdatetime(1969,12,31,19,0,0) # (YYYY,MM,DD,HH,MM,SS)
origin <- as.double(iso)

t <- Sys.time()
curr.time <- as.double(t)

curr.time - origin



The following bit of code simulates a cumulative process where each consecutive process follows a Poisson distribution  and $\lambda$ (lambda) is a random variable distributed uniformly.  This would be comparable to a process where election vote counts are being collected throughout Election Night.

set.seed(1234)
time.series <- seq(Sys.time(), Sys.time()+4*60*60, by=60*5) #Add 4 hours to time series
vals <- matrix(NA, ncol=3, nrow=length(time.series))

for(i in 1:length(time.series)){

if( is.numeric(vals[i-1,1]) &amp; is.numeric(vals[i-1,2]) ){
vals[i,1] <- vals[i-1,1]+rpois(n=1, runif(1, 700,1000))
vals[i,2] <- vals[i-1,2]+rpois(n=1, runif(1, 850,1000))
} else {
vals[i,1] <- runif(1, 700,1000)
vals[i,2] <- runif(1, 850,1000)
}

}
vals[,3] <- vals[,1]/(vals[,1]+vals[,2])
prop <- vals[,3]*100
prop2 <- (1-vals[,3])*100

plot(time.series,prop, type="o", cex=.6, lty=1, col="blue", pch=1,
ylim=c(46,54)
, ylab="Percent", xlab="Time of Computation"
, main=paste("Example of Cumulative Process Using Time")
, sub="Cumulative Proportional Process", cex.sub=.60
, xaxt = "n", yaxt = "n");
lines(time.series, prop2, type="o", cex=.6, lty=1, col="red", pch=4);

xaxis.seq.half<- seq(strptime(c(min(time.series)), "%Y-%m-%d %H"),
strptime(c(max(time.series)), "%Y-%m-%d %H")+3600, by=1800)
xaxis.seq.hour <- seq(strptime(c(min(time.series)), "%Y-%m-%d %H"),
strptime(c(max(time.series)), "%Y-%m-%d %H")+3600, by=3600)
axis(1, at=(xaxis.seq.hour), tcl = -0.7, lty = 1, lwd = 0.8, labels=FALSE)
axis(1, at=(xaxis.seq.half), tcl = -0.3, lty = 2, lwd = 0.5, labels=FALSE)
axis(2, at=seq(46,54,by=1), labels=FALSE, tcl = -0.2, lty = 1, lwd = 0.5)
axis(2, at=seq(46,54,by=1), labels=TRUE, tcl = -0.7, lty = 1)
axis.POSIXct(1, as.POSIXlt(xaxis.seq.hour), at=as.POSIXlt(xaxis.seq.hour),
format="%H:%M", tcl = 0.3, las=0, lty = 2, lwd = 0.5, cex.axis=.7, labels=TRUE)