Разбивка дельта-метки времени в R (наносекунды, микросекунды, миллисекунды) - PullRequest
2 голосов
/ 11 марта 2019

Я работаю в R, и мне нужно изменить метку времени с того, что я считаю точностью до наносекунды, либо с точностью до микросекунды, либо с точностью до миллисекунды (я считаю, что она должна составлять миллисекунды или только три цифры после десятичной дроби).

Пример двух временных меток

"2019-03-02D00:00:12.214841000"

Часть сложности в том, что я не думаю, что есть пакет типа lubridate, чтобы справиться с этим. Я не уверен, нужно ли мне использовать регулярное выражение для извлечения секунд, а затем преобразовать наносекунды в миллисекунды. Я открыт для любых предложений.

Кроме того, как вы рекомендуете иметь дело с D? Я подумал, что мне следует использовать gsub("D", "-", df$timestamp) и, может быть, тогда пакет типа lubridate сможет проанализировать метку времени даже с точностью до наносекунды?

Ответы [ 2 ]

3 голосов
/ 11 марта 2019

Вы можете использовать as.POSIXct после gsub("D", " ", x):

as.POSIXct(gsub("D", " ", "2019-03-02D00:00:12.214841000"))

После этого вы можете работать с точностью до миллисекунды:

dt <- as.POSIXct(gsub("D", " ", "2019-03-02D00:00:12.214841000"))
dt
[1] "2019-03-02 00:00:12 CET"
for(i in 1:1000) dt <- dt - 0.001
dt
[1] "2019-03-02 00:00:11 CET"

Если вы хотите отобразить эти миллисекунды, вы можете использовать format:

format(dt, "%Y-%m-%d %H:%M:%OS3")
[1] "2019-03-02 00:00:11.214"
format(dt - 1E-3, "%Y-%m-%d %H:%M:%OS3")
[1] "2019-03-02 00:00:11.213"
format(dt - 10E-3, "%Y-%m-%d %H:%M:%OS3")
[1] "2019-03-02 00:00:11.204"
2 голосов
/ 11 марта 2019

Вы можете использовать библиотеку nanotime, относящуюся к integer64 (очень высокая точность с плавающей точкой)

library(nanotime)
x<-nanotime("2019-03-02T00:00:12.214841000+00:00")

Как видите, вам нужно изменить D на T и добавить 00:00 в конец, но это легко сделать, как показала вам Symbolrush.

x<-nanotime(paste0(gsub("D", "T", "2019-03-02D00:00:12.214841000"), "+00:00"))

Подробнее здесь:

http://dirk.eddelbuettel.com/code/nanotime.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...