web-dev-qa-db-fra.com

R: Comment extraire les dates d'une série chronologique

Comment puis-je extraire des dates d'une série chronologique? Voici une série chronologique:

x = seq (1, 768)
myts <- ts(x, start=1982, frequency=24)

À l’origine, j’avais besoin de créer un vecteur contenant des données de date/heure pour la fonction rts. Les observations commencent en 1982 avec 2 mesures par mois jusqu’en 2013.

23
Liza

Essayer:

time(myts)

ou peut-être:

library(Zoo)
as.yearmon(time(myts))
40
G. Grothendieck

Si vous avez besoin d'objets POSIX* - ce qui n'est probablement pas approprié lorsque vous travaillez avec des données bimensuelles, mais peut s'avérer utile lorsque vous utilisez des résolutions temporelles plus élevées - vous pouvez également utiliser date_decimal de lubridate .

library(lubridate)
mts <- as.numeric(time(myts))

## 'POSIXct, POSIXt' object
tms <- date_decimal(mts)
7
fdetsch

Vous pouvez utiliser la fonction suivante. L'entrée est une série chronologique in r. Et la sortie est une liste contenant tous les temps tableau de l'heure de début à l'heure de fin.

À l'aide de la liste, vous pouvez utiliser la fonction window() pour tronquer une série temporelle très facilement.

getTStime <- function(ats){
  start <- start(ats)
  end <- end(ats)
  time <- list()
  time[[1]] <- start
  m <- 2
  while(!(identical(start, end))){
    start[2] <- start[2] + 1
    if (start[2]==13){
      start[1] <- start[1] + 1
      start[2] <- 1
    }
    time[[m]] <- start
    m <- m + 1
  }
  return(time)
}
1
Jason Lian

Le problème initial posé dans la question est particulièrement difficile car il contient un échantillonnage non standard, c'est-à-dire 24 fois par an. Vous devez donc utiliser des méthodes non standard pour extraire les dates que d'autres ont couvertes de manière adéquate. Pour ceux qui tombent sur cette question et qui ont des séries chronologiques plus standard, la solution est plus simple. 

x <- 1:(768/2) ## shorten the ts to reflect lower sampling rate
myts <- ts(x, start = c(1982, 1), frequency = 12) ## now one sample per month
dates <- as.Date(myts)
0
user6571411