Как стать автором
Обновить

Комментарии 14

Алексей, спасибо. lubridate это очень правильный пакет для дат. Про timeperiodsR только узнал, наверное, надо попробовать.

Спасибо за комментарий!


timeperiodsR это мой пакет, я его в сентябре только опубликовал на CRAN.


Зачем я его написал, потому, что мне надоело копипастить часть кода для определения отчётного периода, в 90% случаев это прошлый месяц или прошлая неделя. И я решил для этого создать удобный пакет.


Потом решил, что удобно будет ещё и проверку периода с фильтрацией добавить, и дописал в пакет несколько операторов.


Если интересно вот ссылка на виньетку, на опечатки в ней прошу пока особо внимания не обращать, в следующей редакции всё исправлю.

Полезная функциональность. Спасибо!

А не подскажите простой способ преобразовать "1w 2d 3h" в часы, например?

Добрый день, подскажу:


library(lubridate)
as.numeric(as.duration("1w 2d 3h"), "hours")

[1] 219

as.duration создаёт объект класса durations. Который с помощью as.numeric легко переводится в число, равное количеству временных отрезков заданное во втором аргументе.

Спасибо за статью.
Можно еще добавить, что разных пакетах есть ещё свои костылики для работы с датой\временем.
Например в data.table есть классы IDate/ITime и функции с ними связанные; и хочется верить, что при обработке данных в таблицах это ускоряет работу с датами\временем, аж шуба заворачивается ;)

Спасибо, отличная идея. В ближайшее время допишу статью.

Алексей, такой вопрос. Как лучше добавить склонение к датам? Тот же lubridate выдает 13 март, 1 декабрь… Нужно: 13 марта, 1 декабря. Чтобы работало без поломок кодировки. Спасибо!

Честно говоря так сразу затрудняюсь ответить, попробую найти решение, как найду отпишусь тут.


Первое что в голову пришло просто создать справочник склонений, и просто заменять как текст.

Первое что в голову пришло просто создать справочник склонений, и просто заменять как текст.


Были проблемы с похожим подходом. Я сравнивал weekdays(Sys.Date()) == 'понедельник'. Проблема началась тогда, когда скрипт стал запускаться через планировщик (возможно, через cron такая же беда). Оказалось, что никогда сравнение не срабатывало, вручную срабатывало. Подсказали, что кодировка в этом случае ломается. Мой вопрос: stackoverflow.com/questions/54981059/r-weekdayssys-date-cannot-figure-out-what-causes-this-behavior

Можно попробовать тестово через планировщик запустить и принтов добавить, потом глянуть лог как он отображает имена месяцев / дней и т.д..


В принципе проблему кодировки можно решить, например в начало скрипта добавить Sys.setlocale("LC_CTYPE", "russian").


Или на худой конец при сравнение кодировать через iconv().


Я не особо силён в английском, но у них вроде нет склонений, поэтому и сомневаюсь, что какими то стандартными способами это можно в R реализовать, разве что какой то API использовать русскоязычный для склонения.

Это наблюдалось при таком locale:

> Sys.getlocale("LC_TIME")
[1] "Russian_Russia.1251"


Можно попробовать тестово через планировщик запустить и принтов добавить, потом глянуть лог как он отображает имена месяцев / дней и т.д..


Придется поэкспериментировать. Кроме как замены через словарь я не нашел вариантов, а без замены выглядит не очень и не приятно русским заказчикам.

Я не особо силён в английском, но у них вроде нет склонений


У них нет, там все просто.
Алексей, спасибо большое за статью!
Подскажите пожалуйста, чем обрабатывать time-коды, в которых подсчёты до наносекунд? Часто сталкиваюсь, что при обработке json'ов с веб странички например клики пользователя учитываются в наносекундах, а надо перевести в нормальный POSIXlt. Я просто делю на 1 млн, но мб подскажите более изящный способ/библиотеку)
Т.е. есть 1608177375410482537, а надо 2020-12-01 11:43:37

Честно говоря более простого и специального метода чем просто разделить на 1 млн я не знаю, но вы ведь можете и сами написать себе для этого функцию, если она часто вам нужна. И поместить эту функнцию к примеру в .RProfile.


В таком случа функция сама будет подгружаться при запуске R.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации