Подсчитать количество понедельников с начала года - PullRequest
0 голосов
/ 09 января 2020

Я бы хотел узнать, с сегодняшней даты, сколько понедельников произошло за год.

x <- Sys.Date()
format(x, "%V")

# [1] "02"

Возвращает значение «02», сообщая, что это вторая неделя года. Тем не менее, мне нужно значение «01», которое говорит мне, что в течение года только один понедельник произошел.

Есть идеи?

Ответы [ 3 ]

2 голосов
/ 09 января 2020

Вот базовое решение R, использующее weekdays() + sum()

w <- weekdays(seq(as.Date("2020-01-01"),as.Date(Sys.Date()),by = "1 day"))
r <- sum(w == "måndag")

, такое что

> r
[1] 1

Поскольку моя система в Swedi sh, поэтому ключевое слово для понедельника "måndag". Вы можете проверить, как weekdays дает для понедельника в зависимости от языка вашей системы.

2 голосов
/ 09 января 2020

Я думаю, что нашел ответ на свой вопрос с помощью Lubridate:

library(lubridate)

x <- Sys.Date()

start <- as.Date(cut(x, "month"))
end <- Sys.Date()
all_dates <- seq(from = start, to = end, by = "days")

week <- length(which(wday(all_dates)==2)) # number of Mondays in date sequence

В моем конкретном случае мне также был нужен начальный ноль, поэтому я мог бы также сделать следующее:

library(stringr)

week <- as.character(week)
week <- str_pad(week, 2, pad = "0")

week

#[1] "01"
1 голос
/ 09 января 2020

Вот функция, построенная с использованием lubridate, идея состоит в том, чтобы построить вектор дат понедельника и узнать, сколько раз это произошло;

library(lubridate)

get_occurance <- function(date, weekday){
  # Get year of the date
  this_year <- paste0(year(date), "-01-01")

  # Create list of days
  all_dates <- strftime(as.Date(1:365, origin = this_year))

  # Create list of specific weekday
  weekday_days <- all_dates[strftime(all_dates,"%A") == weekday]

  # Return number
  which((weekday_days <= date) & weekday_days > as.character(ymd(date) %m-% days(7)))
}

# Try it with today
today <- Sys.Date()
get_occurance(today, "Monday")
[1] 1

# Try it with other dates
get_occurance(as.Date("2020-01-28"), "Monday")
[1] 4

get_occurance(as.Date("2020-01-27"), "Monday")
[1] 4 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...