2016-11-18 2 views
0

Можно ли совершить N-е деловую неделю месяца? В настоящее время у меня есть следующий код, но он учитывает выходные дни. Так, например, если мы дадим дату 2016-10-10, это даст 3 в качестве текущей недели месяца. В действительности, это фактически вторая неделя бизнеса месяца.Nth Business Week месяца

wk <- function(x) as.numeric(format(x, "%U")); 
cur.wom = wk(d) - wk(as.Date(cut(d, "month"))) + 1 
+0

Возможно, вы захотите более четко определить «деловую неделю», чтобы мы точно знали, что вы имеете в виду. – thelatemail

+0

будние дни .... нет выходных дней – user1234440

+0

Так что 5 рабочих дней в неделю? Или каждый понедельник сигнализирует о новой деловой неделе независимо от дней? – thelatemail

ответ

1

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

myDate <- as.POSIXlt("2016-10-10", format = "%Y-%m-%d") 

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

Мы можем использовать следующее уравнение, чтобы получить значение вашей бизнес-недели.

(myDate$mday - myDate$wday + 4) %/% 7 + 1 

mday поле содержит день месяца для даты и wday содержит числовое значение, указывающее день недели (начиная с 0 в воскресенье). Вычитая wday от mday, мы получаем одно и то же число за любой день в пределах той же недели. %/% 7 выполняет целочисленное деление, которое разделяет вещи на недели. + 4 корректирует значение для каждой недели, так что, когда применяется %/% 7, он укажет желаемую неделю, независимо от того, в какой день недели начинается месяц. Финал + 1 просто преобразует данные, поэтому начальный этап недель начинается с 1, а не 0.