Robert Kubrick
Robert Kubrick

Reputation: 8713

R xts: millisecond index

How do I create an xts object whose indexes include milliseconds? I can't find any format spec in the POSIXlt help page but there is a reference to %OS in indexFormat().

UPDATE

xts example based on Gavin zoo answer:

> options(digits.secs = 3)
> data(sample_matrix)
> sample.xts = xts(sample_matrix, Sys.time() + seq(0, by = 0.1, length = 180))
> head(sample.xts)
                            Open     High      Low    Close
2012-03-20 08:49:02.820 50.03978 50.11778 49.95041 50.11778
2012-03-20 08:49:02.920 50.23050 50.42188 50.23050 50.39767
2012-03-20 08:49:03.020 50.42096 50.42096 50.26414 50.33236
2012-03-20 08:49:03.120 50.37347 50.37347 50.22103 50.33459
2012-03-20 08:49:03.220 50.24433 50.24433 50.11121 50.18112
2012-03-20 08:49:03.320 50.13211 50.21561 49.99185 49.99185

Upvotes: 5

Views: 2378

Answers (1)

Gavin Simpson
Gavin Simpson

Reputation: 174778

This works with package zoo so I suspect it works also with xts as the latter builds upon the former.

> ## create some times with milliseconds
> times <- Sys.time() + seq(0, by = 0.1, length = 10)
> times
 [1] "2012-03-19 22:10:57.763 GMT" "2012-03-19 22:10:57.863 GMT"
 [3] "2012-03-19 22:10:57.963 GMT" "2012-03-19 22:10:58.063 GMT"
 [5] "2012-03-19 22:10:58.163 GMT" "2012-03-19 22:10:58.263 GMT"
 [7] "2012-03-19 22:10:58.363 GMT" "2012-03-19 22:10:58.463 GMT"
 [9] "2012-03-19 22:10:58.563 GMT" "2012-03-19 22:10:58.663 GMT"
> ZOO <- zoo(1:10, order = times)
> index(ZOO)
 [1] "2012-03-19 22:10:57.763 GMT" "2012-03-19 22:10:57.863 GMT"
 [3] "2012-03-19 22:10:57.963 GMT" "2012-03-19 22:10:58.063 GMT"
 [5] "2012-03-19 22:10:58.163 GMT" "2012-03-19 22:10:58.263 GMT"
 [7] "2012-03-19 22:10:58.363 GMT" "2012-03-19 22:10:58.463 GMT"
 [9] "2012-03-19 22:10:58.563 GMT" "2012-03-19 22:10:58.663 GMT"

The trick to see the milliseconds is to alter the digits.secs option via options(). The above performed using:

> getOption("digits.secs")
[1] 3

Which is set using

> opts <- options(digits.secs = 3)

You can reset this to default (0) by doing options(opts). By default R doesn't print sub-second information because digits.secs defaults to 0. The data are recorded to sub-second accuracy though, even if not printed.

If this is not what you meant, can you explain what you did that was not working?

Upvotes: 7

Related Questions