Cec Jurczyk
Cec Jurczyk

Reputation: 87

Extract dates times from a data.frame in R

I have a dataset with some date time like this "{datetime:2015-07-01 09:10:00" So I wanted to remove the text, and then keep the date & the time as as.Date returns only the date. So I write this code but the only problem I have is that during the second line with strsplit, it only returns me the date time of the first line and so erase the others... I woud love to get ALL my date time not only the first. I thought about sapply maybe, but I can't make it right I have many errors or maybe with a loop for? I am novice to R so I don't really know how to do this the best way.

Could you help me please? Besides If you have another idea for the time & date format or a simple way to do it, it should be very nice of you too.

data$`Date Time`=as.character(data$`Date Time`)

data$`Date Time`=unlist(strsplit(data[,1], split='e:'))[2]

date=substr(data$`Date Time`,0,10)

date=as.Date(date)

time=substr(data$`Date Time`,12,19)

data$Date=date

data$Time=time

Thank you very much for your help!

Upvotes: 1

Views: 4847

Answers (1)

mathematical.coffee
mathematical.coffee

Reputation: 56915

You could use the format argument to avoid all the strsplit:

times <- as.POSIXct(data$`Date Time`, format='{datetime:%Y-%m-%d %H:%M:%S')

(The reason for the "{datetime:" in the format is because you mentioned this is the format of your strings).

This object has both date and time in it, and then you can just store it in the dataframe as a single column of type POSIXct rather than two columns of type string e.g.

data$datetime <- times

but if you do want to store the date as a Date and the time as a string (as in your example above):

data$Date <- as.Date(times)
data$Time <- strftime(times, format='%H:%M:%S')

See ?as.Date, ?as.POSIXct, ?strptime for more details on that format argument and various conversions between date and string.

Upvotes: 7

Related Questions