Создать дату в R, временные интервалы увеличиваются на 10 мс в формате Unix timestamp - PullRequest
0 голосов
/ 17 июня 2020

Я пытаюсь преобразовать этот вектор (v) в Unix отметки времени. Год, месяц, день, час, минута, секунды не важны, но их необходимо ввести.

v = c("10ms", "20ms", "30ms", ..., "800ms")

A) Я думал начать с:

x <- c("2000-01-01 0:00:00.000", "2000-01-01 0:00:00.010", "2000-01-01 0:00:00.020")
y <- as.POSIXct(x, format = "%Y-%m-%d %H:%M:%OS", origin = "1970-01-01", tz = "America/Chicago")
y = format(y, "%Y-%m-%d %H:%M:%OS4")

B) и преобразуйте это во временную метку Unix:

z = as.numeric(as.POSIXct(y,format = "%Y-%m-%d %H:%M:%OS4", origin = "1970-01-01", tz = "America/Chicago"))

Это дает: NA NA NA

z = as.numeric(as.POSIXct(y,format = "%Y-%m-%d %H:%M:%OS", origin = "1970-01-01", tz = "America/Chicago"))

Это дает: 946706400 946706400 946706400

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 17 июня 2020

Это на удивление легко исправить. В вашем примере z на самом деле действительно содержит десятичную часть, но она не выводится на консоль, потому что число такое большое. Если вы конвертируете его в символ, вы должны получить желаемый результат:

as.character(round(z, 3))
#> [1] "946706400"    "946706400.01" "946706400.02"

Или, в зависимости от выбранного вами формата:

y <- as.POSIXct("2000-01-01") + lubridate::milliseconds(1:10)
format(round(as.numeric(y), 3), digits = 13)
#>  [1] "946684800.001" "946684800.002" "946684800.003" "946684800.004" "946684800.005"
#>  [6] "946684800.006" "946684800.007" "946684800.008" "946684800.009" "946684800.010"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...