#r #timestamp #posixct
#r #временная метка #posixct
Вопрос:
Я пытаюсь преобразовать 12-часовую временную метку в объект POSIXct в R. По какой-то причине он удаляет секунды после преобразования.
## timestamp
chk = '17-MAY-16 04.51.34.000000000 PM'
## convert
as.POSIXct(chk, format = '%d-%b-%y %I.%M.%S.%OS %p', tz = 'America/New_York')
[1] "2016-05-17 16:51:00 EDT"
Я что-то делаю неправильно?
Ответ №1:
Он не удаляет секунды. Он просто придерживается значения по умолчанию для печати и форматирования, которое не включает подсекунды.
Посмотрите пример, который
- на самом деле имеет подсекундные записи
- выполняется в сеансе с
options(digits.secs)
правильным набором - исправлена одна ошибка, которая была у вас в строке формата
ДЕМОНСТРАЦИЯ:
R> options(digits.secs=6) # important to tell R we want subsecs
R> input <- '17-MAY-16 04.51.34.123456 PM'
R> as.POSIXct(input, '%d-%b-%y %I.%M.%OS %p', tz = 'America/New_York')
[1] "2016-05-17 16:51:34.123456 EDT"
R>
Если мы сбросим digits.secs=0
его, он вернется только к целым секундам (что, в конце концов, является хорошим значением по умолчанию для многих настроек, хотя можно утверждать, что %0S
это может переопределить его …)
R> options(digits.secs=0) # reset
R> as.POSIXct(input, '%d-%b-%y %I.%M.%OS %p', tz = 'America/New_York')
[1] "2016-05-17 16:51:34 EDT"
R>
Также обратите внимание на небольшое изменение в строке формата. Не используйте оба %S
и %OS
.
Комментарии:
1. Спасибо! Я не понимал, что было ошибкой использовать оба
%S
и%OS
в строке форматирования. Это решило мою проблему.2. Хорошо … На самом деле у меня есть пакет для этих проблем 😉 в любое время (но он имеет сильное предпочтение
%Y
over%y
по обычным причинам).