Как преобразовать строку в формат даты в R

У меня есть столбец строк в следующем формате:

Wed, 6 Dec 2000 08:47:00 -0800 (PST)

Как я могу преобразовать это в формат даты с помощью lubridate или другого пакета? Я делал это раньше, но в конце не было -0800 (PST).

Спасибо.


person ilyas    schedule 20.06.2016    source источник
comment
Используйте функцию as.Date ()   -  person milan    schedule 20.06.2016
comment
as.POSIXct(x, format="%a, %d %b %Y %H:%M:%S %z", tz="US/Pacific") - см. ?strptime - Смещение со знаком «% z» в часах и минутах от UTC, так что «-0800» на 8 часов отстает от UTC.   -  person thelatemail    schedule 20.06.2016
comment
Большое спасибо @thelatemail. Однако в моих данных 500 000 строк. Так что strptime для этого не медлителен. Я буду использовать lubridate parse_date_time. Я обнаружил, что это очень быстро.   -  person ilyas    schedule 20.06.2016
comment
@ilyas - as.POSIXct в моем тестировании намного быстрее, чем parse_date_time - примерно в 3 раза быстрее.   -  person thelatemail    schedule 20.06.2016
comment
Ох, хорошо. Я думаю, что сравнивал его с strptime. Кроме того, где я могу найти полный список имен зон? Тот, который назначен tz?   -  person ilyas    schedule 20.06.2016
comment
@ilyas - strptime снова еще быстрее. Также см. OlsonNames()   -  person thelatemail    schedule 20.06.2016
comment
Хорошо, я это проверил, и вы правы. Однако извлечение информации из столбца datetime, такого как день недели, выполняется быстрее при использовании lubridate или data.table.   -  person ilyas    schedule 20.06.2016


Ответы (2)


Я смог получить результат, используя strptime(), даже не беспокоясь о названии часового пояса в конце:

> x - "Wed, 6 Dec 2000 08:47:00 -0800 (PST)"
> strptime(x,  "%a, %d %b %Y %H:%M:%S %z")
[1] "2000-12-07 00:47:00"

Однако, если вы хотите удалить название часового пояса, вы можете использовать substr() для этого:

> strptime(substr(x, 1, nchar(x)-6),  "%a, %d %b %Y %H:%M:%S %z")
[1] "2000-12-07 00:47:00"
person Tim Biegeleisen    schedule 20.06.2016
comment
Спасибо. Я буду использовать parse_date_time (x = info [, Date], orders = 'a, d b Y H: M: S z', tz = US / Pacific). - person ilyas; 20.06.2016

Мы также можем использовать parse_date_time

library(lubridate)
parse_date_time(x, "adbY HMS z", tz = "US/Pacific")
#[1] "2000-12-06 08:47:00 PST"
person akrun    schedule 20.06.2016