2017-01-10 12 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 в настоящее время.

Я хочу, чтобы держать их в двух перевалах с правильным форматом, поэтому я использую

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

, чтобы получить 1-й седловину в формате дата:

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

Но во 2-е седловины, когда я 'm пытается использовать

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

Если вы хотите иметь чистый объект времени, вам нужен пакет, который определяет такой класс. Вы можете использовать пакет 'chron'. Однако я бы предложил совместить дату и время с объектом 'POSIXct'. Есть неприятности, такие как високосные годы и прыжки секунд, которые необходимо учитывать. – Roland

ответ

0

Мы можем использовать sub для извлечения компонента 'время'

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

, и если мы хотим time класс, используйте times из chron

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() 'get' chr'. Но 'format()' очень полезно для какой-либо другой части моего кода. Благодаря! – hepeng

+0

@hepeng Попробуйте функцию 'hms' от' lubridate'. –