2017-01-10 26 views
1

部分看起來像:如何僅從strptime()中提取時間?數據

head(my_data[,c(1,2)], 3) 
     Date Time 
1 16/12/2006 17:24:00 
2 16/12/2006 17:25:00 
3 16/12/2006 17:26:00 

順便說一句,str() $Date, $Time都是CHR現在。

我想,讓他們兩個的cols以正確的格式,所以我用

x <- as.Date(my_data$Date, "%d/%m/%Y") 

得到日期格式的第一個關口:

x[1:5] 
[1] "2006-12-16" "2006-12-16" "2006-12-16" "2006-12-16" "2006-12-16" 

但在第2個關口,當我試圖使用

y <- strptime(my_data$Time, "%H:%M:%S") 

輸出自動添加我的電腦的默認日期和時區。

y[1:4] 
[1] "2017-01-10 17:24:00 CST" "2017-01-10 17:25:00 CST" 
[2] "2017-01-10 17:26:00 CST" "2017-01-10 17:27:00 CST" 

如果我只想保持時間,沒有日期和時區,該怎麼辦?
sub()用一些正則表達式來實現這個的唯一方法嗎?

+2

如果你想有一個純粹的時間對象另一種選擇,你需要一個包,定義這樣一類。你可以使用package'chron'。但是,我建議將日期和時間合併到一個'POSIXct'對象中。有些問題需要考慮,比如閏年和閏秒。 – Roland

回答

0

我們可以使用sub提取 '時間' 組件

sub(".*\\s+", "", y) 
#[1] "17:24:00" "17:25:00" "17:26:00" 

,如果我們想要一個time類,使用timeschron

library(chron) 
times(my_data$Time) 
#[1] 17:24:00 17:25:00 17:26:00 
+0

非常感謝!我想這就是我想要得到的。 'chron'包。 – hepeng

0

我們可以使用format來提取時間部分

format(strptime(y, "%H:%M:%S"),"%H:%M:%S") 

lubridate

library(lubridate) 
hms(my_data$Time) 
+0

使用'format'我可以只列出時間,用'str()'獲得'chr'。但'format()'對於我的代碼的其他部分非常有用。謝謝! – hepeng

+0

@hepeng從'lubridate'嘗試'hms'功能。 –