#r #datetime
#r #дата-время
Вопрос:
Хотя, похоже, существует множество сообщений, посвященных этой проблеме или связанным с ней проблемам, я не смог найти сообщение, предоставляющее решение на R. Проблему должно быть легко решить, как только вы узнаете, как это сделать: у меня есть векторы с миллисекундами. Я хотел бы преобразовать их в часы, минуты, секунды (с тремя десятичными знаками). Например:
x <- c(29, 300, 1000, 213451)
Ожидаемый результат таков:
# "00:00:00.029" "00:00:00.300" "00:00:01.000" "00:03:33.451"
То, что я пробовал до сих пор, — это запутанная серия операций:
hrs = x / (60 * 60 * 1000)
mins = (hrs %% 1) * 60
secs <- sprintf(((mins %% 1) * 60), fmt = '%#.3f')
paste(trunc(hrs), trunc(mins), secs, sep = ":")
[1] "0:0:0.029" "0:0:0.300" "0:0:1.000" "0:3:33.451"
Результат лучше, чем ничего, но все же он далек от ожидаемого результата, и, более того, код для его получения далек от простого или элегантного.
Какой более быстрый и элегантный способ преобразовать миллисекунды в формат временной метки?
РЕДАКТИРОВАТЬ: В качестве альтернативы, я пробовал следующее:
library(chron)
times(x / (24 * 60 * 60 * 1000))
Но при этом не удается напечатать десятичные дроби.
Ответ №1:
Вы можете установить, "%OSn"
чтобы секунды указывались усеченными до n
десятичных знаков, где n
находится между 0 и 6.
format(as.POSIXct(x / 1000, "UTC", origin = "1970-01-01"), "%H:%M:%OS3")
# [1] "00:00:00.029" "00:00:00.300" "00:00:01.000" "00:03:33.450"