a) POSIXt represents the idea of a datetime. POSIXct is a compact
representation (number of seconds since 1970-01-01 00:00:00 GMT) of this
idea. POSIXlt is an inefficient but convenient representation (using
nine separate components) of this idea. Either POSIXct or POSIXlt may be
treated as a POSIXt, but you cannot create a POSIXt as such... it has to
be one of the other two types. Strptime returns a POSIXlt, not so
efficient for sorting and so forth.
b) Because the POSIXct representation is always referenced to GMT, and
the POSIXlt representation always indicates the timezone and daylight
savings time, you may find these representations difficult to work with
for "simple" problems. If your times come from multiple timezones, or
include the daylight savings time shift (and you need to work with times
around the autumn changeover) then you have to use POSIXct or POSIXlt.
Otherwise, you may find that Date or chron classes are easier to work with.
c) Note that a column of data that only includes time should probably be
converted to "difftime" using as.difftime. Your code is filling in the
current date on your strptime result, which can get you into trouble
later if you import other times on other dates and then try to compare
times you imported previously. There is an as.numeric(z,units="secs")
that you can use to obtain sortable values on the fly.
tc <- textConnection( "DATE,TIME
18/01/2011,08:00:01
18/01/2011,08:10:01
18/01/2011,08:20:01
18/01/2011,08:30:01
19/01/2011,08:00:01
19/01/2011,08:10:01
19/01/2011,08:20:01
19/01/2011,08:30:01
")
dta <- read.csv( tc, as.is=TRUE )
close( tc )
dta$DATE <- as.Date( dta$DATE, format="%d/%m/%Y" )
dta$TIME <- as.difftime( dta$TIME )
dta.sorted <- dta[order( dta$DATE, -as.numeric( dta$TIME ) ), ]
JonC wrote:
I have a problem ordering by descending magnitude a POSIXt object. Can
someone help please and let me know how to work around this. My goal is to
be able to order my data by DATE and then by descending TIME.
I have tried to include as much info as possible below. The problem stems
from trying to read in times from a CSV file. I have converted the character
time values to a POSIXt object using the STRPTIME function. I would like
ideally to sort using the order function as below.
test.sort <- order(test$DATE, -test$mytime)
However, when I try this I receive the error as below :
Error in `-.POSIXt`(test2$mytime) :
unary '-' is not defined for "POSIXt" objects
To make this easier to understand I have pasted my example data below with a
list of R commands I have used. Any help or assistance would be appreciated.
test2 <- read.csv("C:/Documents and Settings/Jonathan Cooke/My
Documents/Downloads/test2.csv", sep=",")
test2
DATE TIME
1 18/01/2011 08:00:01
2 18/01/2011 08:10:01
3 18/01/2011 08:20:01
4 18/01/2011 08:30:01
5 19/01/2011 08:00:01
6 19/01/2011 08:10:01
7 19/01/2011 08:20:01
8 19/01/2011 08:30:01
test2$mytime <- strptime(test2$TIME,"%H:%M:%S")
test2$mytime
[1] "2011-02-14 08:00:01" "2011-02-14 08:10:01" "2011-02-14 08:20:01"
"2011-02-14 08:30:01" "2011-02-14 08:00:01"
[6] "2011-02-14 08:10:01" "2011-02-14 08:20:01" "2011-02-14 08:30:01"
test2
DATE TIME mytime
1 18/01/2011 08:00:01 2011-02-14 08:00:01
2 18/01/2011 08:10:01 2011-02-14 08:10:01
3 18/01/2011 08:20:01 2011-02-14 08:20:01
4 18/01/2011 08:30:01 2011-02-14 08:30:01
5 19/01/2011 08:00:01 2011-02-14 08:00:01
6 19/01/2011 08:10:01 2011-02-14 08:10:01
7 19/01/2011 08:20:01 2011-02-14 08:20:01
8 19/01/2011 08:30:01 2011-02-14 08:30:01
test2.sort <- order(test2$DATE, -test2$mytime)
Error in `-.POSIXt`(test2$mytime) :
unary '-' is not defined for "POSIXt" objects
It's at this stage where I have got stuck as I'm new to R and don't yet know
a way of getting around this error. Thanks in advance.
JonC
______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.