[R] Converting factor data into Date-time format

Joshua Wiley jwiley.psych at gmail.com
Tue Mar 13 17:48:26 CET 2012


This is just a little comment to supplement Michael's excellent
solution.  If there are even a few (e.g., 5 each) repeated values,
this:

as.POSIXct(as.character(levels(x)), format = "%d/%m/%Y %H:%M")[x]

will be substantially faster, with the speed gains strongly associated
with the number of replicates in your factor (where 'x' is your factor
(note it is used twice!!).  A little timing example:

x <- factor(rep(paste("01/01/2012 10:", 0:59, sep = ''), each = 5))
t1 <- t2 <- NULL

system.time(replicate(500, {t1 <<- as.POSIXct(as.character(x), format
= "%d/%m/%Y %H:%M")}))
system.time(replicate(500, {t2 <<- as.POSIXct(as.character(levels(x)),
format = "%d/%m/%Y %H:%M")[x]}))

all.equal(t1, t2)

#### on my machine
## > system.time(replicate(500, {t1 <<- as.POSIXct(as.character(x),
format = "%d/%m/%Y %H:%M")}))
##    user  system elapsed
##    3.01    0.01    3.03
## > system.time(replicate(500, {t2 <<-
as.POSIXct(as.character(levels(x)), format = "%d/%m/%Y %H:%M")[x]}))
##    user  system elapsed
##    0.67    0.00    0.67
## > all.equal(t1, t2)
## [1] TRUE

On Tue, Mar 13, 2012 at 9:30 AM, R. Michael Weylandt
<michael.weylandt at gmail.com> wrote:
> as.POSIXct(as.character(FACTORHERE), format = "%d/%m/%Y %H:%M")
>
> Michael
>
> On Tue, Mar 13, 2012 at 12:20 PM, Haojie Yan <yhj204 at googlemail.com> wrote:
>> Dear R-user,
>>
>> I have read a dataset from .csv file into R. This dataset includes one
>> column containing some data in 'date and time' format, e.g. 'dd/mm/yyyy
>> hh:mm'.
>>
>> These data were automatically read and saved as 'factor' in R. When I was
>> trying to produce some plots (such as time series) with the above 'date and
>> time' on x-axis,  it caused some disodering problem, e.g. 1st of March 2012
>> is in front of 10th of Feb. 2012 (if the data is from 10th Feb. 2012 to 1st
>> of March 2012). I understand that I might have to convert them from
>> 'factor' to 'date' first, so I tried using 'as.date'. But this method seems
>> only work for data in format of  'd/m/y' and no further option that allows
>> me to add hours and minutes.
>>
>> I checked online for other methods such as 'as.POSIX' and 'strptime' but
>> none of them seem to offer me a quick solution.
>>
>> Please note that the data I received is recorded every 10 minutes so they
>> are saved in the form of  'dd/mm/yyyy hh:mm', e.g. I only have data
>> measured up to 'minute' NOT to  'second'. Are there any direct solution
>> that I can solve this issue??
>>
>>
>> Many thanks in advance!
>> HJ
>>
>>        [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-help at 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.
>
> ______________________________________________
> R-help at 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.



-- 
Joshua Wiley
Ph.D. Student, Health Psychology
Programmer Analyst II, Statistical Consulting Group
University of California, Los Angeles
https://joshuawiley.com/



More information about the R-help mailing list