6

I have large number of dates in this format:

dt = as.POSIXct("2004-04-02 12:45:00 UTC")

And I have to add/subtract numbers that may not always be whole numbers.I am using lubridate library.

Example:

 dt - days(2)
[1] "2004-03-31 12:45:00 UTC"

But,

dt - days(1.5)
Error in validObject(.Object) : 
  invalid class “Period” object: periods must have integer values

Is there an alternative for this operation?

eipi10
  • 91,525
  • 24
  • 209
  • 285
maximusdooku
  • 5,242
  • 10
  • 54
  • 94

1 Answers1

8

The error is occurring with days(1.5), which doesn't allow fractional periods. You could do:

dt - days(1) - hours(12)

or

dt - 1.5*24*3600

or there's probably a base date function that guys like @DirkEddelbuettel know about that would work also. Ah, it's difftime (I don't work with dates enough to remember these things off the top of my head).

dt - as.difftime(1.5, units="days")

And, as pointed out by @maximusdooku:

dt - ddays(1.5)

(Based on the code, it looks like ddays just returns the number of seconds in the requested time period, plus some class information.)

eipi10
  • 91,525
  • 24
  • 209
  • 285