2016-04-24 56 views
1

我有可变裂枣分别

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 

我想要的变量分成两个日期和时间seperatly日期。 当我试图
a <- strftime(date, format="%H:%M:%S"),它显示在as.POSIXlt.default(X,TZ = TZ)

错误:不知道如何 转换 'X' 上课“POSIXlt”

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

+0

这些时间戳对应的年份是几年? –

+0

我们说它是2016年 – suresh

回答

2

您得到该错误的原因是因为您的date变量没有正确的格式。您应该将date变量转换到一个POSIX类strptime

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

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

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

用于提取日期,它是preferrably使用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) 
+0

我试过使用dat $ date < - strptime(dat $ date,format ='%d%b%y:%H:%M:%S') as.character(x) : 不能强制类型'关闭'类型'字符'的向量 – suresh

+0

如果我有这个变量在csv文件....当我试着看到变量的类型使用类...它显示它的功能。如何更改它 – suresh

+0

@suresh可能是因为您的区域设置未正确设置,请尝试先用'Sys.setlocale(category ='LC_TIME',locale ='en_US')设置它' – h3rm4n

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"