分开日期

时间:2016-04-24 08:10:58

标签: r

我有一个日期变量

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

我希望将变量分成两个作为日期和时间的分开。 我试过的时候 a <- strftime(date, format="%H:%M:%S"),它正在显示

  

as.POSIXlt.default(x,tz = tz)出错:不知道怎么做   转换&#39; x&#39;上课“POSIXlt”

当我试图查看数据类型时,它将其显示为函数。如何将其转换为日期并拆分为两个变量?

2 个答案:

答案 0 :(得分:2)

您收到该错误的原因是因为您的date变量尚未提供正确的格式。您应首先使用datestrptime变量转换为POSIX类:

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

之后,您可以使用format从该变量中提取时间:

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

为了提取日期,最好使用as.Date

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

这些步骤将给出以下结果:

> 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

备选方案,您可以使用lubridate包(如另一个答案中所示):

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

使用过的数据:

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)

答案 1 :(得分:1)

lubridate可以轻松地将文字转换为日期

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"