У меня есть data.table из миллионов строк, и один из столбцов - столбец даты. Я хотел бы добавить 12 месяцев ко всем датам в этом столбце и создать новый столбец. Поэтому я использую пакеты dplyr и lubridate.
library(dplyr)
library(lubridate)
new_data <- data %>% mutate(date12m = date %m+% months(12))
Это работает, однако очень медленно для больших наборов данных. Я что-то упускаю? Как это можно ускорить? Обычно я не ожидаю, что R будет работать более 10 минут для такой простой задачи.
Изменить:
Отмечу, что мое решение уже более эффективно, чем использование as.yearmon. Спасибо полковнику Бовелю за решение
a <- data.frame(date = rep(today(),1000000))
func = function(u) {
d = as.Date(as.yearmon(u)+1, frac=1)
if(day(u)>day(d)) return(d)
day(d) = day(u)
d
}
pt <- proc.time()
a <- a %>% mutate(date12m = func(date))
data.table::timetaken(pt)
pt <- proc.time()
a <- a %>% mutate(date12m = date %m+% 12)
data.table::timetaken(pt)