Преобразование временных меток без добавления гггг-мм-дд

#r #timestamp #lubridate

#r #временная метка #lubridate

Вопрос:

Я хочу преобразовать временные метки из символов во время, но мне не нужна никакая дата. Кроме того, он должен отображать миллисекунды, как в «hh: mm: ss, os».

Если я использую as.POSIXCT , он всегда добавляет префикс даты к моей временной метке, а это не входит в мои намерения. Я также проверил lubridate пакет, но, похоже, не могу найти функцию, которая выходит за рамки «as.hms», чтобы она отображала по крайней мере две цифры в миллисекундах.

Пример использования POSIXct

 df <-c("01:31:12.20","01:31:14.56","01:31:14.84")

options(digits.secs = 2)
df <- as.POSIXct(df, format="%H:%M:%OS")
  

Это и есть результат:

 [1] "2019-03-15 01:31:12.20 EDT" "2019-03-15 01:31:14.55 EDT"
[3] "2019-03-15 01:31:14.83 EDT"
  

Спасибо.

Комментарии:

1. К сожалению, это не работает, поскольку формат функции chron () также «чч: мм: сс», в нем нет миллисекунд.

2. для даты также нужна дата, если я понимаю

3. Верно. Я отредактирую часть «дата».

4. хорошо, тогда непонятно, чего вы действительно хотели, потому что hms(df) преобразует это в Period class

5. @goncaloveiga Вам нужна дата, чтобы выполнять вычисления вовремя. Затем вы можете переформатировать свои данные с помощью format .

Ответ №1:

Возможно, hms пакет выполняет то, что ожидает операционная система. hms реализует класс S3 для хранения и форматирования значений времени суток на основе класса ‘difftime’.

 library(hms)
as.hms(df)
  
 01:31:12.200000
01:31:14.560000
01:31:14.840000
  

Он может быть использован для расчета, например,

 diff(as.hms(df))
  
 00:00:02.360000
00:00:00.280000
  

Пожалуйста, обратите внимание, что методы print() и format() не принимают другие параметры и не соблюдают options(digits.secs = 2) .


hms Класс похож на lubridate функцию as.hms() , которая создает объект периода:

 lubridate::hms(df)
  
 [1] "1H 31M 12.2S"  "1H 31M 14.56S" "1H 31M 14.84S"
  

Также можно выполнить арифметику:

 diff(lubridate::hms(df))
  
 [1] 2.36 0.28
  

Пожалуйста, имейте в виду, что внутреннее представление объектов time, date и datetime обычно основано на числовых типах, позволяющих выполнять вычисления. Внутреннее представление отличается от символьной строки при печати объекта.


ITime Класс в data.table пакете — это класс времени суток, который хранит целое количество секунд в сутках. Таким образом, он не может обрабатывать миллисекунды.