Я начал использовать пакет data.table в R, чтобы повысить производительность моего кода. Я использую следующий код:
sp500 <- read.csv('../rawdata/GMTSP.csv')
days <- c("Monday","Tuesday","Wednesday","Thursday","Friday","Saturday","Sunday")
# Using data.table to get the things much much faster
sp500 <- data.table(sp500, key="Date")
sp500 <- sp500[,Date:=as.Date(Date, "%m/%d/%Y")]
sp500 <- sp500[,Weekday:=factor(weekdays(sp500[,Date]), levels=days, ordered=T)]
sp500 <- sp500[,Year:=(as.POSIXlt(Date)$year+1900)]
sp500 <- sp500[,Month:=(as.POSIXlt(Date)$mon+1)]
Я заметил, что преобразование, выполняемое функцией as.Date, происходит очень медленно, по сравнению с другими функциями, которые создают рабочие дни и т.д. Почему? Есть ли лучшее/быстрое решение, как конвертировать в формат даты? (Если вы спросите, действительно ли мне нужен формат даты, возможно, да, потому что тогда используйте ggplot2 для создания графиков, которые работают как шарм с данным типом данных.)
Чтобы быть более точным
> system.time(sp500 <- sp500[,Date:=as.Date(Date, "%m/%d/%Y")])
user system elapsed
92.603 0.289 93.014
> system.time(sp500 <- sp500[,Weekday:=factor(weekdays(sp500[,Date]), levels=days, ordered=T)])
user system elapsed
1.938 0.062 2.001
> system.time(sp500 <- sp500[,Year:=(as.POSIXlt(Date)$year+1900)])
user system elapsed
0.304 0.001 0.305
На MacAir i5 с менее чем 3000000 наблюдениями.
Спасибо