Этот вопрос касается производительности кода. У меня есть фрейм данных с двумя столбцами:Эффективное форматирование даты и времени в больших наборах данных в исполнении R - dplyr
DATE
представлена как числовая вMMDDYYYY
форматеEPOCH
является представлением времени с шагом 5 минут от полуночи.EPOCH
отсчет начинается с 0 - так 00:00 до 00:05 будет 0, 00:05 до 00:10 будет 1 и так далее.
У меня около 15 миллионов строк данных в моем кадре данных. В рамках обработки этих данных я преобразую два столбца в формат R Date
и POSIXct
. Я использую dplyr
- однако код, который у меня есть, слишком длинный (около 30 минут). Ниже я генерируя набор игрушка данных и при условии, что код я использую:
library(dplyr)
DATA <- data.frame(DATE = rep(10082013,15000000), EPOCH = rep(6,15000000))
Вот вид выборки данных
DATA %>%
head()
DATE EPOCH
1 10082013 6
2 10082013 6
3 10082013 6
4 10082013 6
5 10082013 6
6 10082013 6
Это та часть, где я преобразовать данные в формат Я хочу это в:
DATA %>%
mutate(DATE_FORMATTED = as.Date(as.character(DATE), "%m%d%Y")) %>%
mutate(DOW = weekdays(DATE_FORMATTED)) %>%
mutate(TIME_FORMATTED = strftime(as.POSIXct(((EPOCH+1)*5*60), origin=as.character(DATE_FORMATTED), tz="UTC"), format="%R", tz="UTC")) %>%
head()
Я чувствую, что накладные расходы из-за всех принуждения в TIME_FORMATTED
формуле. Есть ли способ достичь конечного результата быстрее? Может быть, другая функция, которая оптимизирована dplyr
?
Почему вы вынуждаете 'DATE_FORMATTED' возвращаться к' символу' в последнем 'mutate'? Согласно документам, 'origin' в любом случае принуждается к' Date'. – shadowtalker
Да - характер принуждения происхождения в последнем заявлении мутанта действительно был избыточным. – sriramn
Хорошо. Я понимаю, почему я это использовал. Я запутался между двумя функциями 'strptime' и' strftime'. Первый требует принуждения, а второй - нет. Однако код все еще медленный. :( – sriramn