Skip to content
  • 0.6.0
  • 6684c0e
  • Compare
    Choose a tag to compare
    Search for a tag
  • 0.6.0
  • 6684c0e
  • Compare
    Choose a tag to compare
    Search for a tag

@selesnow selesnow released this Jan 3, 2020 · 7 commits to master since this release

Пользовательские выходные дни

Иногда помимо официальных выходных дней вам может понадобиться выделить собственные дополнительные выходные дни, например ваш отпуск.
Пакет timeperiodsR даёт вам такую возможность с помощью опции или переменной среды.

В опцию timeperiodsR.custom_day_offs вы можете передать вектор с датами которые будут помечены как дополнительные выходные дни, такие дни в компоненте dayoffs_marks будут помечены значением 3.

Также вы можете задать переменную среды TPR_CUSTOM_DAY_OFFS, в которой укажите даты в формате ГГГГ-ММ-ДД разделённые запятыми или точками с запятой.

Таким образом вы можете помечать дополнительные выходные дни.

options("timeperiodsR.custom_day_offs" = c("2020-01-14", "2020-01-15", "2020-01-16", "2020-01-17", "2020-02-12"))
tm <- this_month("2020-01-01")

# получить ваши пользовательские выходные которые входят в текущий период
tm$custom_day_offs

# пользовательские выходные будут помечены 3
tm$dayoffs_marks
Assets 2
  • 0.5.0
  • b3a6f32
  • Compare
    Choose a tag to compare
    Search for a tag
  • 0.5.0
  • b3a6f32
  • Compare
    Choose a tag to compare
    Search for a tag

@selesnow selesnow released this Dec 28, 2019 · 18 commits to master since this release

Значительно расширен функционал пакета и в целом класс tpr.

Расширение класса tpr

В пакет интегрирован API производственного календаря isDayOff(). За счёт чего был значительно расширен класс tpr.

Опции

По умолчанию в пакете нет дополнительных компонентов, для их активации вам необходимо активировать следующие опции:

options("timeperiodsR.official_day_offs" = TRUE,
        "timeperiodsR.official_day_offs_country" = "ru",
        "timeperiodsR.official_day_offs_pre" = 1)

После чего в классе tpr вам будут доступны следующие компоненты:

  • official_workdays - Официальные рабочие дни;
  • official_first_workday - Первый официальный рабочий день;
  • official_last_workday - Последний официальный рабочий день;
  • official_day_offs - официальные выходные дни в выбранной стране, по умолчанию России;
  • dayoffs_marks - пометки о том, какой статус имеет день в официальном календаре страны.

Переменные среды

Так же в пакеты была добавленна поддержка переменных среды для активации новых компонентов:

  • TPR_DAY_OFFS - TRUE, для активации дополнительных компонентов;
  • TPR_COUNTRY - Страна: ru, ua, by или kz;
  • TPR_PRE - Включать в компонент official_day_offs сокращённые рабочие дни, в компоненте dayoffs_marks они будут помечены числом 2.

Новая функция

Функция check_dayoffs() позволяет вам проверить любую дату, вектор дат или объект класса tpr и получить пометку о том какой статус выбранные даты имеют в официальном календаре.

Документация

Более подробно обо всём функционале можно узнать в виньетке: vignette("tpr_intro", package = "timeperiodsR")

timeperiodsR 0.4.0

Дата: 2019-12-27

  • Расширен класс tpr, добавлены следующие компоненты

    • workdays - вектор состоящий из будний дней входящих в период
    • weekends - вектор состоящий из выходных дней входящих в период
    • first_workday - первый будний день периода
    • last_workday - последний будний день периода
    • first_weekend - первый выходной день периода
    • last_weekend - последний выходной день периода
    • workdays_length - количество будних дней в периоде
    • weekends_length - количество выходных дней в периоде
  • Добавлены новые методы

    • workdays - получить вектор будних дней периода
    • weekends - получить вектор выходных дней периода
    • first_workday - получить первый будний день периода
    • last_workday - получить последний будний день периода
    • first_weekend - получить первый выходной день периода
    • last_weekend - получить последний выходной день периода
    • workdays_length - получить количество будних дней в периоде
    • weekends_length - получить количество выходных дней в периоде
  • Аргумент part также теперь принимает больше значений

    • start
    • end
    • length
    • sequence
    • workdays
    • weekends
    • first_workday
    • last_workday
    • first_weekend
    • last_weekend
    • workdays_length
    • weekends_length
Assets 2
  • 0.4.0
  • e1c7677
  • Compare
    Choose a tag to compare
    Search for a tag
  • 0.4.0
  • e1c7677
  • Compare
    Choose a tag to compare
    Search for a tag

@selesnow selesnow released this Dec 27, 2019 · 24 commits to master since this release

В версии timeperiodsR расширен список компонентов класса tpr, и соответственно появились новые методы для их извлечения.

Подробности

  • Расширен класс tpr, добавлены следующие компоненты

    • workdays - вектор состоящий из будних дней входящих в период
    • weekends - вектор состоящий из выходных дней входящих в период
    • first_workday - первый будний день периода
    • last_workday - последний будний день периода
    • first_weekend - первый выходной день периода
    • last_weekend - последний выходной день периода
    • workdays_length - количество будних дней в периоде
    • weekends_length - количество выходных дней в периоде
  • Добавлены новые методы

    • workdays - получить вектор будних дней периода
    • weekends - получить вектор выходных дней периода
    • first_workday - получить первый будний день периода
    • last_workday - получить последний будний день периода
    • first_weekend - получить первый выходной день периода
    • last_weekend - получить последний выходной день периода
    • workdays_length - получить количество будних дней в периоде
    • weekends_length - получить количество выходных дней в периоде
  • Аргумент part также теперь принимает больше значений

    • start
    • end
    • length
    • sequence
    • workdays
    • weekends
    • first_workday
    • last_workday
    • first_weekend
    • last_weekend
    • workdays_length
    • weekends_length

Пример работы с новыми компонентами и методами

# install.packages("devtools")
# devtools::install_github("selesnow/timeperiodsR")

library(timeperiodsR)

# получаем прошлый месяц
pm <- previous_month()

# компоненты
pm$start           # начало периода
pm$end             # завершения периода
pm$length          # длительность периода
pm$sequence        # вся последовательность дат
pm$weekdays        # буднии дни в периоде
pm$weekends        # выходные дни в периоде
pm$first_weekday   # первый будний день периода
pm$last_weekday    # последний будний день периода
pm$first_weekend   # первый выходной день периода
pm$last_weekday    # последний выходной день периода
pm$workdays_length # количество будних дней в периоде
pm$weekend_length  # количество выходных дней в периоде

# методы
weekdays(pm)        # будние дни
first_weekday(pm)   # первый будний
last_weekday(pm)    # последний будний

weekends(pm)        # выходные дни
first_weekend(pm)   # первый выходной день
last_weekend(pm)    # последний выходной

workdays_length(pm) # количество будних дней в периоде
weekend_length(pm)  # количество выходных дней в периоде

start(pm)           # начало периода
end(pm)             # завершения периода
length(pm)          # длительность периода
seq(pm)             # вся последовательность дат
Assets 2
  • 0.3.0
  • 347defb
  • Compare
    Choose a tag to compare
    Search for a tag
  • 0.3.0
  • 347defb
  • Compare
    Choose a tag to compare
    Search for a tag

@selesnow selesnow released this Dec 11, 2019 · 26 commits to master since this release

  1. У пакета появился видео мануал.
  2. Добавлена функция as_timeperiod(), которая позволяет преобразовать строковый вектор, или вектор содержащий даты в объект класса tpr.
  3. Дописана и отредактирована виньетка к пакету.
Assets 2
  • 0.2.0
  • ee4d51c
  • Compare
    Choose a tag to compare
    Search for a tag
  • 0.2.0
  • ee4d51c
  • Compare
    Choose a tag to compare
    Search for a tag

@selesnow selesnow released this Nov 15, 2019 · 27 commits to master since this release

В этом релизе были оптимизированы старые функции пакета, теперь все они под капотом используют функцию custom_period() для создания объектов класса tpr.

Но основная часть доработок и расширения функционала пакета timepriodsR это операторы.

В timeperiodsR есть несколько операторов.

  • %.in% - проверяет вхождение одного вектора дат, или объекта класса tpr в другой, и возвращает логический вектор.
  • %left_out% - сравнивает два объекта класса tpr, и возвращает значение из левого, которые отсутствуют в правом.
  • %left_in% - сравнивает два объекта класса tpr, и возвращает даты из левого объекта которые входят в правый.
  • %right_out% - сравнивает два объекта класса tpr, и возвращает значение из правого, которые отсутствуют в левом.
  • %right_in% - сравнивает два объекта класса tpr, и возвращает даты из правого объекта которые присутствуют в левом.

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

Сначала создадим два объекта tpr класса, относительно 7 ноября 2019 года. Один будет соответствовать текущему месяцу, а второй предыдущей неделе.

period1 <- this_month("2019-11-07")
period2 <- previous_week("2019-11-07")

print(period1)
print(period2)

В таком случае первый период содержит даты с 1 по 30 ноября, а второй с 28 октября по 3 ноября. Т.е. частично эти два периода пересекаются и мы можем фильтровать один из используя значения другого.

period1 %left_in% period2   # получить даты из period1 которые входят в period2
period1 %left_out% period2  # получить даты из period1 которые не входят в period2
period1 %right_in% period2  # получить даты из period2 которые входят в period1
period1 %right_out% period2 # получить даты из period2 которые не входят в period2

Такие операторы фильтрации удобно использовать например при проверке данных в базе за какой-то период, в тех случаях когда вы наполняете базу данными из внешних источников на ежедневной основе.

К примеру вы каждый день запрашиваете данные из API Google Analytics, и записываете их в базу. При этом API периодически может давать сбой, и за какой-то день в вашей базе будут отсутствовать данные, тогда вы можете определить проверочный период, например предыдущие 30 дней, с помощью команды last_n_days(n = 30). Далее запрашивать данные за этот из вашей СУБД. После, с помощью приведённых выше операторов фильтрации убрать из общего 30 дневного периода даты которые пристукают в базе, и по оставшимся датам подгрузить данные.

Пример

library(DBI)
library(timesperiodsR)
library(stringr)

# подключение к базе
con <- dbConnect()

# проверочный период в 30 дней
test_days <- last_n_days(n = 30)

# запрашиваем данные из базы
sql <- str_interp("SELECT * FROM table WHERE date BETWEEN '${test_days$start}' AND ''${test_days$end}")
db_data <- dbGetQuery(con, sql)

# получаем даты за которые в базе отсутвуют данные
out_dates <- db_data$date %left_out% test_days

# циклом проходимся по отсутвующим датам
for ( date in out_dates ) {
    # тело цикла
    ....
}
Assets 2
  • 0.1.0
  • 67bcdf0
  • Compare
    Choose a tag to compare
    Search for a tag
  • 0.1.0
  • 67bcdf0
  • Compare
    Choose a tag to compare
    Search for a tag

@selesnow selesnow released this Nov 14, 2019 · 28 commits to master since this release

Первый релиз пакета.

Assets 2
You can’t perform that action at this time.