[R] read mignight as 24:00 and not as 0:00

Daniel Nordlund djnordlund at frontier.com
Sun Jul 15 23:04:20 CEST 2012


> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-project.org]
> On Behalf Of Sandy Adriaenssens
> Sent: Friday, July 13, 2012 3:52 AM
> To: r-help at r-project.org
> Subject: [R] read mignight as 24:00 and not as 0:00
> 
> Dear all,
> 
> I have dataset which contains date and time in the format
> "yearmonthdayhour". I can read in these data correctly as follows:
> 
> mydata <- read.csv("pm10_corine_gridcel_hourly_2011.csv", header = TRUE)
> mydata$date <- as.POSIXct(strptime(mydata$date, format = "%Y%m%d%H",
> tz="UTC"))
> 
> However, midnight is defined as 24:00 in my original file (so the end of
> the
> day), while the POSIXct function changes this to 0:00 (the beginning of
> the
> next day).
> So, my data now go from January 1 2011 1:00 to Januari 1 2012 0:00, in
> stead
> of December 31 2011 24:00.
> 
> summary(mydata$date)
>                  Min.               1st Qu.                Median
> "2011-01-01 01:00:00" "2011-04-02 06:45:00" "2011-07-02 12:30:00"
>                  Mean               3rd Qu.                  Max.
> "2011-07-02 12:30:00" "2011-10-01 18:15:00" "2012-01-01 00:00:00"
> 
> I would like to change this 0:00 to 24:00 again since I want to include
> these values in daily averages of the previous day (and not of the next
> day). So the day of the month should also be diminished by 1.
> 
> I have tried extracting the hours which are 0 and converting them to 24,
> but
> then I can't paste them back in the date/time of the original data.fram
> again.
> 
> Are there maybe other solutions?
> 
> Thanks in advance,
> 
> Sandy
> 
> ifelse (as.POSIXlt(mydata[24,1])$hour = "0",as.POSIXlt(mydata[24,1])$hour
> =
> "24"
> 

Sandy,

You really haven't given us enough information to provide a "solution", but here are some questions and suggestions.  

Do you have any times less than 01:00:00 ?  You mention going from 01:00:00 to 24:00:00 in you data.  I presume these are text fields and not time objects. Do you have fractional hours represented in your data, or are all times on the hour?

1.  If your times are always on the hour no minutes or second, i.e. 01:00 to 24:00, then you could read them as is and then just subtract 1 hour from all date/time values.

2.  If you have fractional hours, e.g. 00:32:00 or 11:45, then you could possible just read the date/time values and whenever the time is exactly 00:00:00, subtract 1 second from the value.  this will at least get you just before midnight on the previous day.

Whether either of these approaches will work for you depends on what your actual needs are.  If this doesn't work for you, you will need to write back to R-help and explain more about what your actual needs are, and and provide more detail about you actual dates and times (see questions above".


Hope this is somewhat helpful,

Dan

Daniel Nordlund
Bothell, WA USA



More information about the R-help mailing list