tags:

views:

210

answers:

1

I have what may be a very simple question. I want to process a column of POSIXct objects from a dataframe and generate a vector of datetime strings. I tried to use the following sapply call

dt <- sapply(df$datetime, function(x) format(x,"%Y-%m-%dT%H:%M:%S"))

but to no avail. I keep getting the following error:

Error in prettyNum(.Internal(format(x, trim, digits, nsmall, width, 3L, :
invalid 'trim' argument

When I apply this function to a single POSIXct object from the column, I have no problem. So I'm stumped at the moment about what the problem is. Do I need to do something special with POSIXct objects?

+7  A: 

format() will take a vector argument, so format(df$datetime,"%Y-%m-%dT%H:%M:%S") should do what you need.

When you use sapply, your objects are coerced to numeric, and so the wrong format method is being invoked. You could coerce them back to POSIXct by using sapply(df$datetime, function(x) format(as.POSIXct(x, origin="1970-01-01"),"%Y-%m-%dT%H:%M:%S")), but unless you have a special reason to use apply, just use the method above

Leo Alekseyev
Many thanks Leo! Very simple answer indeed.
Chris