Как я могу дополнить вектор дат на единицы меньше, чем 1 секунда в R? - PullRequest
0 голосов
/ 06 февраля 2020

Я пытаюсь выяснить, как добавить интервалы времени в вектор дат в R, используя единицы измерения менее 1 секунды. Как видите, заполнение интервалов в одну секунду работает, однако десятичные дроби не работают. Я огляделся и, кажется, в R. нет единицы измерения «миллисекунды». Есть ли какой-нибудь способ, которым я могу дополнить вектор раз с интервалами менее 1 секунды?

> require(padr)
> require(dplyr)
> options(digits.secs=3)
> start = as.POSIXct("2020-01-28 03:31:22.209 EST", format = "%Y-%m-%d %H:%M:%OS")
> end = as.POSIXct("2020-01-28 05:31:22.209 EST", format = "%Y-%m-%d %H:%M:%OS")
> 
> minz <- seq(start, end, units = "minutes", by = "1 min")
> head(minz)
[1] "2020-01-28 03:31:22.209 EST" "2020-01-28 03:32:22.209 EST" "2020-01-28 03:33:22.209 EST" "2020-01-28 03:34:22.209 EST"
[5] "2020-01-28 03:35:22.209 EST" "2020-01-28 03:36:22.209 EST"
> secz <- as.data.frame(minz) %>% pad('1 sec')
> head(secz)
                     minz
1 2020-01-28 03:31:22.209
2 2020-01-28 03:31:23.209
3 2020-01-28 03:31:24.209
4 2020-01-28 03:31:25.209
5 2020-01-28 03:31:26.209
6 2020-01-28 03:31:27.209
> half_secz <- as.data.frame(minz) %>% pad('0.5 sec')
Error in seq.int(0, to0 - from, by) : invalid '(to - from)/by'
> head(secz)
                     minz
1 2020-01-28 03:31:22.209
2 2020-01-28 03:31:23.209
3 2020-01-28 03:31:24.209
4 2020-01-28 03:31:25.209
5 2020-01-28 03:31:26.209
6 2020-01-28 03:31:27.209

1 Ответ

1 голос
/ 06 февраля 2020

Мы можем использовать seq, так как он указывает аргумент by как 0,5.

start = as.POSIXct("2020-01-28 03:31:22.209", format = "%Y-%m-%d %H:%M:%OS",tz = "UTC")
end =  as.POSIXct("2020-01-28 05:31:22.209", format = "%Y-%m-%d %H:%M:%OS",tz = "UTC")

seq(start, end, by = 0.5) %>% head

#[1] "2020-01-28 03:31:22.209 UTC" "2020-01-28 03:31:22.709 UTC"
#[3] "2020-01-28 03:31:23.209 UTC" "2020-01-28 03:31:23.709 UTC"
#[5] "2020-01-28 03:31:24.209 UTC" "2020-01-28 03:31:24.709 UTC"

Или, если вы хотите использовать его в secz фрейме данных

tidyr::complete(secz, minz = seq(min(minz), max(minz), by = 0.5))

#    minz                   
#   <dttm>                 
# 1 2020-01-28 03:31:22.209
# 2 2020-01-28 03:31:22.709
# 3 2020-01-28 03:31:23.209
# 4 2020-01-28 03:31:23.709
# 5 2020-01-28 03:31:24.209
# 6 2020-01-28 03:31:24.709
# 7 2020-01-28 03:31:25.209
# 8 2020-01-28 03:31:25.709
# 9 2020-01-28 03:31:26.209
#10 2020-01-28 03:31:26.709
# … with 14,391 more rows
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...