Это какой-то хелли sh вопрос, связанный с аппроксимациями с плавающей точкой и временными метками в R. Приготовьтесь :) Рассмотрим простой пример:
library(tibble)
library(lubridate)
library(dplyr)
tibble(timestamp_chr1 = c('2014-01-02 01:35:50.858'),
timestamp_chr2 = c('2014-01-02 01:35:50.800')) %>%
mutate(time1 = lubridate::ymd_hms(timestamp_chr1),
time2 = lubridate::ymd_hms(timestamp_chr2),
timediff = as.numeric(time1 - time2))
# A tibble: 1 x 5
timestamp_chr1 timestamp_chr2 time1 time2 timediff
<chr> <chr> <dttm> <dttm> <dbl>
1 2014-01-02 01:35:50.858 2014-01-02 01:35:50.800 2014-01-02 01:35:50.858000 2014-01-02 01:35:50.799999 0.0580001
Здесь разница во времени между двумя временными метками очевидна 58
миллисекунды, но R сохраняет это с некоторым приближением с плавающей точкой, так что оно выглядит как 0.058001
секунд.
Какой самый безопасный способ получить точно 58
миллисекунд как вместо ответа? Я думал об использовании as.integer
(вместо as.numeric
), но меня беспокоит некоторая потеря информации. Что тут можно сделать?
Спасибо!