What Time Is It?

[This article was first published on Statistical Research » R, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
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)

To leave a comment for the author, please follow the link and comment on their blog: Statistical Research » R.

R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

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)