Générer une série chronologique avec une date de début et de fin précise

je veux générer une série de temps avec toutes les dates dans la gamme:

startDate = "1990-01-01"
endDate = "1990-12-31"

Par exemple "1990-01-01", "1990-01-02", ...

10
demandé sur csgillespie 2011-09-29 13:53:38

3 réponses

@csgillespie:chron fournit la fonction is.weekend:

days = seq(as.Date("1990-01-01"), as.Date("1990-12-31"), by="1 day")
library(chron)
weekDays = days[!is.weekend(days)]

## let's check the result with the function weekdays
weekdays(weekDays)

en Outre, vous pouvez obtenir les mêmes résultats sans chron en utilisant format:

isWeekend <- function(x) {format(x, '%w') %in% c(0, 6)}
weekDays2 = days[!isWeekend(days)]
14
répondu Oscar Perpiñán 2011-09-29 12:08:08

Vous pouvez simplement utiliser le seq la commande. Par exemple,

##Specify you want 10 dates starting on 1990-01-01
R> seq(as.Date("1990-01-01"), length.out=10, by="1 day")
 [1] "1990-01-01" "1990-01-02" "1990-01-03" "1990-01-04" "1990-01-05"
 [6] "1990-01-06" "1990-01-07" "1990-01-08" "1990-01-09" "1990-01-10"

ou

##Specify the start and end with increment
R> seq(as.Date("1990-01-01"), as.Date("1990-01-10"), by="1 day")
 [1] "1990-01-01" "1990-01-02" "1990-01-03" "1990-01-04" "1990-01-05"
 [6] "1990-01-06" "1990-01-07" "1990-01-08" "1990-01-09" "1990-01-10"

Pour obtenir juste jours ouvrables, vous pouvez utiliser le chron bibliothèque:

days = seq(as.Date("1990-01-01"), as.Date("1990-12-31"), by="1 day")
library(chron)
weekDays = days[!is.weekend(days)]
4
répondu csgillespie 2011-09-29 10:40:03

il y a un base fonction appelée ?weekdays.

startDate = "1990-01-01"
endDate = "1990-12-31"

x <- seq(as.Date(startDate), to = as.Date(endDate), by="1 day")

x[!weekdays(x) %in% c("Sunday", "Saturday")]

mais, puisque les noms réels des jours seront spécifiques à la localité, assurez-vous de les définir correctement.

Notez que weekdays est juste un wrapper sur format(x, "%A"). Voir ?strptime pour les détails sur les codes de format.

2
répondu mdsumner 2011-09-29 11:35:49