У меня есть таблица данных миллионов строк, а один из столбцов - столбец даты. Я хотел бы добавить 12 месяцев к всем датам в этой колонке и создать новый столбец. Поэтому я использую пакеты dplyr и lubridate, например.R: эффективные способы добавления месяцев к датам?
library(dplyr)
library(lubridate)
new_data <- data %>% mutate(date12m = date %m+% months(12))
Это работает, однако для больших наборов данных это очень медленно. Я что-то упускаю? Как это можно ускорить? Я вообще не ожидал R работать в течение более чем 10 минут для такой простой задачи
Edit:
Хочу отметить, что мое решение уже более эффективно, чем использование as.yearmon. Благодаря полковнику Beauvel для решения
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)
Можете ли вы предоставить небольшую часть своих данных? – jazzurro
надеюсь, что ответ поможет, вам нужно преобразовать нужные столбцы в даты перед применением моей функции. –
Я согласен, что это должно быть быстрее, но это не простая задача, учитывая, что даты хранятся как секунды с тех пор, как jan 1 1970 – hadley