Сегодня я столкнулся со следующей проблемой, и мне интересно, есть ли лучший способ выполнить то, что я пытаюсь сделать.
Предположим, что у меня есть следующий data.table
(только почасовая метка времени):
library(data.table)
tdt <- data.table(Timestamp = seq(as.POSIXct("1980-01-01 00:00:00"), as.POSIXct("2015-01-01 00:00:00"), '1 hour'))
> tdt
Timestamp
1: 1980-01-01 00:00:00
2: 1980-01-01 01:00:00
3: 1980-01-01 02:00:00
4: 1980-01-01 03:00:00
5: 1980-01-01 04:00:00
---
306813: 2014-12-31 20:00:00
306814: 2014-12-31 21:00:00
306815: 2014-12-31 22:00:00
306816: 2014-12-31 23:00:00
306817: 2015-01-01 00:00:00
Моя цель - изменить минуты метки времени, скажем, на 10 минут.
Я знаю, что могу использовать:
library(lubridate)
minute(tdt$Timestamp) <- 10
но это не использует сверхбыструю скорость таблицы данных (которая мне нужна). На моем ноутбуке это заняло:
> system.time(minute(tdt$Timestamp) <- 10)
user system elapsed
11.29 0.16 11.45
Итак, мой вопрос: можем ли мы каким-то образом использовать функцию замены в синтаксисе таблицы данных, чтобы она выполняла то, что я хочу, используя скорость data.table
? Если ответ отрицательный, любое другое решение data.table
, чтобы сделать это быстро, было бы приемлемым.
Если вам интересно, одна из вещей, которую я пробовал:
tdt[, Timestamp2 := minute(Timestamp) <- 10]
который не работает.
Ожидаемый результат (но с синтаксисом таблицы данных):
> tdt
Timestamp
1: 1980-01-01 00:10:00
2: 1980-01-01 01:10:00
3: 1980-01-01 02:10:00
4: 1980-01-01 03:10:00
5: 1980-01-01 04:10:00
---
306813: 2014-12-31 20:10:00
306814: 2014-12-31 21:10:00
306815: 2014-12-31 22:10:00
306816: 2014-12-31 23:10:00
306817: 2015-01-01 00:10:00