изменение формата значения на стандартный 30-секундный формат в R - PullRequest
0 голосов
/ 11 сентября 2018

Я хочу отформатировать нестандартное изменение данных формата значения (чтение только при изменении Value) в стандартный формат 30-секундного интервала.

Что у меня есть: df:

Timestamp   Value
6/26/2018 0:00:06   10
6/26/2018 0:01:06   15
6/26/2018 0:02:15   20

и dput:

structure(list(Timestamp = c("6/26/2018 0:00:06", "6/26/2018 0:01:06", 
"6/26/2018 0:02:15"), Value = c(10L, 15L, 20L)), .Names = c("Timestamp", 
"Value"), class = "data.frame", row.names = c(NA, -3L))

что бы якак formatted_df:

Timestamp   Value
6/26/2018 0:00:30   10
6/26/2018 0:01:00   10
6/26/2018 0:01:30   15
6/26/2018 0:02:00   15
6/26/2018 0:02:30   20

Моя попытка:

Используя функции из lubridate и dplyr, я получил интервалы, кратные30 секунд, но он не не стандартизирует до 30 секунд:

formatted <- df %>% mutate(Timestamp_Date = as.POSIXct(Timestamp, tz = "US/Eastern", usetz = TRUE, format="%m/%d/%Y %H:%M:%S"),
                           rounded_timestamp = ceiling_date(Timestamp_Date, unit = "30 seconds"))

с formatted:

Timestamp   Value   Timestamp_Date  rounded_timestamp
6/26/2018 0:00:06   10  6/26/2018 0:00:06   6/26/2018 0:00:30
6/26/2018 0:01:06   15  6/26/2018 0:01:06   6/26/2018 0:01:30
6/26/2018 0:02:15   20  6/26/2018 0:02:15   6/26/2018 0:02:30

Я думаю lubridate иdplyr было бы здесь полезно, но я бы поспорил, что data.table может это сделать.

1 Ответ

0 голосов
/ 12 сентября 2018

Вы можете использовать data.table подвижное соединение.

library(data.table)

#convert df into data.table and Timestamp into POSIX format
setDT(df)[, Timestamp := as.POSIXct(Timestamp, format="%m/%d/%Y %H:%M:%S")]

#create the intervals of 30seconds according to needs
tstmp <- seq(as.POSIXct("2018-06-26 00:00:30", tz=""), 
    as.POSIXct("2018-06-26 00:02:30", tz=""), 
    by="30 sec")

#rolling join between intervals and df
df[.(Timestamp=tstmp), on=.(Timestamp), roll=Inf]

Выход:

             Timestamp Value
1: 2018-06-26 00:00:30    10
2: 2018-06-26 00:01:00    10
3: 2018-06-26 00:01:30    15
4: 2018-06-26 00:02:00    15
5: 2018-06-26 00:02:30    20

Для получения дополнительной информации, пожалуйста, прочитайте аргумент roll в ?data.table

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