Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Extracting time from POSIXct

Tags:

date

time

r

posixct

How would I extract the time from a series of POSIXct objects discarding the date part?

For instance, I have:

times <- structure(c(1331086009.50098, 1331091427.42461, 1331252565.99979,  1331252675.81601, 1331262597.72474, 1331262641.11786, 1331269557.4059,  1331278779.26727, 1331448476.96126, 1331452596.13806), class = c("POSIXct",  "POSIXt")) 

which corresponds to these dates:

"2012-03-07 03:06:49 CET" "2012-03-07 04:37:07 CET"  "2012-03-09 01:22:45 CET" "2012-03-09 01:24:35 CET"  "2012-03-09 04:09:57 CET" "2012-03-09 04:10:41 CET" "2012-03-09 06:05:57 CET" "2012-03-09 08:39:39 CET" "2012-03-11 07:47:56 CET" "2012-03-11 08:56:36 CET" 

Now, I have some values for a parameter measured at those times:

val <- c(1.25343125e-05, 0.00022890575,           3.9269125e-05, 0.0002285681875,           4.26353125e-05, 5.982625e-05,           2.09575e-05, 0.0001516951251,           2.653125e-05, 0.0001021391875) 

I would like to plot val vs time of the day, irrespectively of the specific day when val was measured.

Is there a specific function that would allow me to do that?

like image 603
nico Avatar asked Mar 23 '12 12:03

nico


People also ask

How do I extract hour from time in R?

Hour is extracted from timestamp (column: Logout_time) using as. numeric () and Format() functions as shown below. So the resultant data frame has a column hour_component with Hour extracted from timestamp.

How do I extract time from a date in Excel?

Select a blank cell and type this formula =HOUR(A1) (A1 is the first cell of the list you want to extract time), press Enter button and drag the fill handle to fill range. Then only time text has been eatraced from the list. Type this formula =MINUTE(A1).


1 Answers

You can use strftime to convert datetimes to any character format:

> t <- strftime(times, format="%H:%M:%S") > t  [1] "02:06:49" "03:37:07" "00:22:45" "00:24:35" "03:09:57" "03:10:41"  [7] "05:05:57" "07:39:39" "06:47:56" "07:56:36" 

But that doesn't help very much, since you want to plot your data. One workaround is to strip the date element from your times, and then to add an identical date to all of your times:

> xx <- as.POSIXct(t, format="%H:%M:%S") > xx  [1] "2012-03-23 02:06:49 GMT" "2012-03-23 03:37:07 GMT"  [3] "2012-03-23 00:22:45 GMT" "2012-03-23 00:24:35 GMT"  [5] "2012-03-23 03:09:57 GMT" "2012-03-23 03:10:41 GMT"  [7] "2012-03-23 05:05:57 GMT" "2012-03-23 07:39:39 GMT"  [9] "2012-03-23 06:47:56 GMT" "2012-03-23 07:56:36 GMT" 

Now you can use these datetime objects in your plot:

plot(xx, rnorm(length(xx)), xlab="Time", ylab="Random value") 

enter image description here


For more help, see ?DateTimeClasses

like image 103
Andrie Avatar answered Nov 16 '22 02:11

Andrie