Как получать количество дней недели в интервале дат?

Давайте предполагать, что у нас есть две даты, которые устанавливают ранг дней, например:

from.date <- as.Date('2018-03-01')
to.date <- as.Date('2018-03-31')

То, что мы хотим, он состоит в том, чтобы находить во все дни lunes, martes, miércoles, etc есть в вышеупомянутом интервале, выводе, сходном с этой:

     lunes    4
    martes    4
 miércoles    4
    jueves    5
   viernes    5
    sábado    5
   domingo    4

Заметь: Эти данные соответствуй интервалу примера

1
задан 28.03.2018, 20:21
3 ответа

Это одна funciГіn, что это делает, хотя что-то уродливое функционирует хорошо:

cdias<-function(from,to){
  d<-c("lunes","martes","miércoles","jueves","viernes","sábado","domingo")
  to<-as.Date(to)
  from<-as.Date(from)
  dif<-to-from
  dias<-round((dif)/7)
  drest<-dif-dias*7+1
  w<-which(d==weekdays(from))
  r<-rep(dias,7)
  for(i in 1:drest){
    if(w<=7){
      r[w]<-r[w]+1
      w<-w+1
    }else{
      w<-1
      r[w]<-r[w]+1
      w<-w+1
    }
  }
  r<-as.data.frame(cbind(dias=d,n=r))
  return(r)
}

cdias("2016-01-11","2018-01-24")
2
ответ дан 24.11.2019, 00:33
  • 1
    Совсем не плохо, относительно выступления несомненно лучшая. Ло ú nico, что возможно он modificarí в es форма, в которой ты определяешь имена недели из-за немного má s diná обезьяна как: d<-weekdays(as.Date(4,"1970-01-01",tz="GMT")+0:6) – Patricio Moracho 04.04.2018, 03:41
  • 2
    Я соглашаюсь относительно determinació n dí эксперт недели. – Rolando Tamayo 04.04.2018, 17:41

Простая форма, которая мне не нравится много, но несомненно эффективная, состоит в том, чтобы использовать "грубую силу" и производить все даты интервала и применять к каждой она funciГіn weekdays():

fechas <-data.frame(cant=seq(from = from.date, to = to.date, by = "days"))
fechas$wday <- factor(weekdays(fechas$cant), levels=weekdays(as.Date(4,"1970-01-01",tz="GMT")+0:6),ordered = TRUE)
aggregate(cant ~ wday, fechas, length)

Вывод:

       wday cant
1     lunes    4
2    martes    4
3 miércoles    4
4    jueves    5
5   viernes    5
6    sábado    5
7   domingo    4

Комментариев:

  • Имена дат, очевидно интернационализированы
  • , Как он интересует нас, что вывод был упорядочен с понедельника, мы нуждаемся в том, чтобы обратить dГ-туз недели в один Factor, но упорядочены из-за dГ - в, но в существо имена, зависимые от языка, мы производим порядок начиная с одной недели, который мы знаем, начинается понедельник, levels=weekdays(as.Date(4,"1970-01-01",tz="GMT")+0:6),
  • Ло Гєltimo состоит в том, чтобы группировать из-за dГ - в с aggregate(cant ~ wday, fechas, length) и считать происшествия
2
ответ дан 24.11.2019, 00:33
library(lubridate)
library(dplyr) 

fechas <- data.frame(cant = seq( 
  from = ymd(20180301),   
  to = ymd(20180331),     
  by = "days"))

fechas %>% 
  mutate(cant = weekdays(cant)) %>% 
  count(cant)

ВїPor quГ© lubridate::? Потому что ymd() и других сходных parsean prГЎcticamente любая вещь как дата.

ymd("2017enero20") == ymd(20170120) 
ymd (170120) == ymd("2017-01-20")                         #
1
ответ дан 24.11.2019, 00:33