時系列から日付を抽出するにはどうすればよいですか?時系列は次のとおりです。
x = seq (1, 768)
myts <- ts(x, start=1982, frequency=24)
もともと、rts
関数の日付/時刻データを保持するベクトルを作成する必要がありました。観測は1982年に始まり、1か月あたり2回の測定が2013年まで続きます。
試してください:
time(myts)
多分:
library(Zoo)
as.yearmon(time(myts))
POSIX*
オブジェクトが必要な場合-半月ごとのデータを扱う場合はおそらく適切ではありませんが、より高い時間解像度を扱う場合には便利かもしれません-date_decimal
fromを使用することもできます- 潤滑剤。
library(lubridate)
mts <- as.numeric(time(myts))
## 'POSIXct, POSIXt' object
tms <- date_decimal(mts)
次の機能を使用できます。入力は時系列 rです。そして、出力はすべての時間を含むリスト開始時間から終了時間までの配列です。
リストの助けを借りて、window()
関数を使用して、時系列を非常に便利に切り捨てることができます。
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)
}
質問で与えられた元の問題は、非標準のサンプリング、つまり年に24回含まれているため、他の人が適切にカバーしている日付を抽出するために非標準の方法を使用する必要があるため、非常に困難です。より標準的な時系列を持つこの質問に出くわした人にとっては、解決策は簡単です。
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)