Преобразование меток времени без добавления гггг-мм-дд - PullRequest
0 голосов
/ 15 марта 2019

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

Если я использую 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 Ответ

0 голосов
/ 17 марта 2019

Возможно, пакет hms делает то, что ожидает OP.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

Обратите внимание, что внутреннее представление объектов времени, даты и даты и времени обычно основано на числовых типахчтобы разрешить делать расчеты.Внутреннее представление отличается от символьной строки при печати объекта.


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

...