Я пишу этот пост, потому что я не мог найти другую тему, где уже был дан ответ на этот вопрос.
Какой код лучше всего подходит для создания формата "y/w" (г – год из двух цифр, а w – номер недели из двух цифр) в R?
Пока что я использую следующее:
require(lubridate)
paste(substr(year(Sys.Date()),3,4),sprintf("%02d", isoweek(Sys.Date())), sep="/")
Но, конечно, это могло потерпеть неудачу в последние дни года или в первые; например, он может дать результат «16/53» на 1 января 2016 года (а должен быть «16/01»).
Я думаю о некоторой конструкции if-else, основанной на том, что Sys.Date
выше или ниже, чем 1 января, и комбинирую ее с функцией wday
, но я уверен, что должно быть более элегантное и лаконичное решение.
У вас есть какие-нибудь идеи по этому поводу?
Спасибо,
MZ
format(Sys.Date(), "%Y-%U")
? - person lukeA   schedule 16.02.2015format(Sys.Date(), "%y/%U"
, но он показывает, что сегодня все еще w7, а должен быть w8... Вот почему я используюisoweek
вместоweek
в пакете смазки. - person MaZe   schedule 16.02.2015isoweek(as.Date("2016-01-01"))
это53
, а не1
. Это то, что вы хотите? Потому что в этом случае я бы просто изменил функциюisoweek
, чтобы она тоже возвращала год. - person lukeA   schedule 16.02.201515/53
, потому что это 53-я неделя 2015 года. Если вы попробуете сisoweek(as.Date(2015-01-01))
, вы увидите, что в этом случае это 1-я неделя, поэтому мой может работать нормально (точно так же, как и до 31 декабря 2015 года). - person MaZe   schedule 16.02.2015