Преобразование данных с нерегулярной меткой времени в данные с регулярным интервалом, используя R - PullRequest
2 голосов
/ 15 марта 2011

В базе данных у меня есть данные с соответствующими временными метками. Временная метка носит случайный характер и имеет разрешение до минут. Я хочу сделать эти данные единообразными, используя R относительно временных меток (с разрешением в секундах) с заменой NA на предыдущее значение. Кроме того, каждая временная метка должна содержать данные для всех символов. Я пробовал несколько пакетов временных рядов для унификации данных, но они не увенчались успехом.

Это код, который я запустил до сих пор

library("RPostgreSQL")  
library(DBI)  
library(sqldf)  
drv <- dbDriver("PostgreSQL")  
ch <- dbConnect(drv, dbname="derivativesData", 
                     user="postgres", password="postgres")  
companyFrame <- dbGetQuery(ch, "select * from derData")  
companyFrame$trade_time  
  [1] "2011-06-01 09:00:00 IST" "2011-06-01 09:00:00 IST"  
  [3] "2011-06-01 09:00:00 IST" "2011-06-01 09:00:00 IST"  
  [5] "2011-06-01 09:00:00 IST" "2011-06-01 09:00:00 IST"  
  [7] "2011-06-01 09:00:00 IST" "2011-06-01 09:00:00 IST"  
  [9] "2011-06-01 09:00:00 IST" "2011-06-01 09:01:00 IST"  
 [11] "2011-06-01 09:01:00 IST" "2011-06-01 09:01:00 IST"  
 [13] "2011-06-01 09:02:00 IST" "2011-06-01 09:02:00 IST"  
 [15] "2011-06-01 09:02:00 IST" "2011-06-01 09:03:00 IST"  
 [17] "2011-06-01 09:04:00 IST" "2011-06-01 09:04:00 IST"  
 [19] "2011-06-01 09:05:00 IST" "2011-06-01 09:05:00 IST"  
 [21] "2011-06-01 09:06:00 IST" "2011-06-01 09:06:00 IST"  
 [23] "2011-06-01 09:06:00 IST" "2011-06-01 09:07:00 IST"  
 [25] "2011-06-01 09:08:00 IST" "2011-06-01 09:09:00 IST"  
 [27] "2011-06-01 09:10:00 IST" "2011-06-01 09:10:00 IST"  

Я хочу преобразовать эти данные в единый формат, скажем, с разрешением 10 секунд.

Ответы [ 2 ]

2 голосов
/ 16 марта 2011

Попробуйте пакет data.table , и его рулон = ИСТИНА. Смотрите? Data.table и виньетки, где говорится о быстром последнем перенесенном наблюдении.

2 голосов
/ 15 марта 2011

Здесь я буду использовать 10-минутное разрешение, потому что у вас нет секунд ...

Со следующими образцами данных:

R> time <- c("2011-06-01 09:00:00 IST", "2011-06-01 09:00:00 IST", "2011-06-01 09:01:00 IST", 
+            "2011-06-01 09:06:00 IST", "2011-06-01 09:10:00 IST", "2011-06-01 09:15:00 IST")

Вы можете сначала преобразовать строки в POSIXlt формат даты:

R> time2 <- strptime(time, format="%Y-%m-%d %X")
R> time2
[1] "2011-06-01 09:00:00" "2011-06-01 09:00:00" "2011-06-01 09:01:00"
[4] "2011-06-01 09:06:00" "2011-06-01 09:10:00" "2011-06-01 09:15:00"

Тогда вы можете использовать функцию minute из пакета lubridate, чтобы изменить минутные компоненты вашей даты и округлить ее до 10-минутного разрешения, например:

R> library(lubridate)
R> minute(time2) <- minute(time2) %/% 10 * 10
R> time2
[1] "2011-06-01 09:00:00 CEST" "2011-06-01 09:00:00 CEST"
[3] "2011-06-01 09:00:00 CEST" "2011-06-01 09:00:00 CEST"
[5] "2011-06-01 09:10:00 CEST" "2011-06-01 09:10:00 CEST"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...