2016-04-24 95 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"