suresh
suresh

Reputation: 59

Split dates separately

I have a date variable

date
15APR16:00:00:04
17APR16:00:06:35
18APR16:00:05:07
18APR16:00:00:56
19APR16:00:08:07
18APR16:00:00:07
22APR16:00:03:07

I want split the variable into two as date and time seperatly. When I tried
a <- strftime(date, format="%H:%M:%S"), it is showing

Error in as.POSIXlt.default(x, tz = tz) : do not know how to convert 'x' to class “POSIXlt”

When I tried to see the data type, it shows it as function. How to convert this into date and split into two variables?

Upvotes: 1

Views: 257

Answers (2)

h3rm4n
h3rm4n

Reputation: 4187

The reason you are getting that error is because your date variable doesn't have the right format yet. You should first convert your date variable to a POSIX class with strptime:

dat$date <- strptime(dat$date, format = '%d%b%y:%H:%M:%S')

After that you can use format to extract the time from that variable:

dat$time <- format(dat$date, "%H:%M:%S")

For extracting the date, it is preferrably to use as.Date:

dat$dates <- as.Date(dat$date)

Those steps will give the following result:

> dat
                 date     time      dates
1 2016-04-15 00:00:04 00:00:04 2016-04-15
2 2016-04-17 00:06:35 00:06:35 2016-04-17
3 2016-04-18 00:05:07 00:05:07 2016-04-18
4 2016-04-18 00:00:56 00:00:56 2016-04-18
5 2016-04-19 00:08:07 00:08:07 2016-04-19
6 2016-04-18 00:00:07 00:00:07 2016-04-18
7 2016-04-22 00:03:07 00:03:07 2016-04-22

Alternative you could use the lubridate package (as also shown in the other answer):

library(lubridate)
dat$date <- dmy_hms(dat$date)

Used data:

dat <- read.table(text="date
15APR16:00:00:04
17APR16:00:06:35
18APR16:00:05:07
18APR16:00:00:56
19APR16:00:08:07
18APR16:00:00:07
22APR16:00:03:07", header=TRUE, stringsAsFactor=FALSE)

Upvotes: 2

Richard Telford
Richard Telford

Reputation: 9923

Package lubridate makes converting text to dates easy

library(lubridate)

x <-dmy_hms("15APR16:00:00:04")
format(x, "%H:%M:%S") # extract time
[1] "00:00:04"
format(x, "%d-%m-%Y") # extract date
[1] "15-04-2016"

Upvotes: 1

Related Questions