簡體   English   中英

在 R 中按日期從時間序列中選擇一個值

[英]Select a value from time series by date in R

如何從對應所需日期的時間序列中選擇一個值?

我用命令創建了一個每月的時間序列對象:

producers.price <- ts(producers.price, start=2012+0/12, frequency=12)

然后我嘗試做下一步:

value <- producers.price[as.Date("01.2015", "%m.%Y")]

但這並不能使我想要並且價值相等

[1] NA

而不是10396.8212805739如果 producer.price 是:

producers.price <- structure(c(7481.52109434237, 6393.18959031561, 6416.63065650718, 
                  5672.08354710121, 7606.24186413516, 5201.59247092013, 6488.18361474813, 
                  8376.39182893415, 9199.50916585545, 8261.87133079494, 8293.8195347453, 
                  8233.13630279516, 7883.17272003961, 7537.21001580393, 6566.60260432381, 
                  7119.99345843556, 8086.40101607729, 9125.11104610046, 10134.0228610828, 
                  10834.5732454454, 9410.35031874371, 9559.36933274129, 9952.38679679724, 
                  10390.3628690951, 11134.8432864557, 11652.0075507499, 12626.9616107684, 
                  12140.6698452193, 11336.8315981684, 10526.0309052316, 10632.1492109584, 
                  8341.26367412737, 9338.95688558448, 9732.80173656971, 10724.5525831506, 
                  11272.2273444623, 10396.8212805739, 10626.8428853062, 11701.0802817581, 
                  NA), .Tsp = c(2012, 2015.25, 12), class = "ts")

因此,我有一個類似的問題,並且一直在尋找解決方案。 我的解決方案不如我期望的那樣好,但是它可以工作。 我用您的數據進行了測試,結果似乎正確。

說明

事實證明,R時間序列中的數據實際上是從1開始而不是與yout T一起存儲的序列。 如果您有一個始於1950年並於1960年結束的時間序列,並且每個數據的間隔為一年,則1950年的Y將為ts [1],1960年的Y將為ts [11]。 根據此邏輯,您需要從數據開始處減去日期,然后加1以獲取該點的值。

R中的這段代碼為您提供了預期的結果。

producers.price[((as.yearmon("2015-01")- as.yearmon("2012-01"))*12)+1]

如果您需要時間計算方面的幫助,請查看此答案。您將需要zoolubridate軟件包。以星期,月份,季度和年為單位獲取日期之間的差額

希望能幫助到你 :)

1)window.ts

window.ts函數用於按時間窗口子集"ts"時間序列。 window命令產生一個帶有一個數據點的時間序列,[[1]]使它成為一個直接的數值:

window(producers.price, start = 2015 + 0/12, end = 2015 + 0/12)[[1]]
## [1] 10396.82

2)動物園我們可以交替將其轉換為動物園和由yearmon類變量下標,然后使用[[1]]或coredata將其轉換為一個普通的數目或者我們可以使用window.zoo就像我們做了很多window.ts

library(zoo)

as.zoo(producers.price)[as.yearmon("2015-01")][[1]]
## [1] 10396.82

coredata(as.zoo(producers.price)[as.yearmon("2015-01")])
## [1] 10396.82

window(as.zoo(producers.price), 2015 + 0/12 )[[1]]
## [1] 10396.82

coredata(window(as.zoo(producers.price), 2015 + 0/12 ))
## [1] 10396.82

3)xts如果將library(zoo)替換為library(xts)並將as.zoo替換為as.xts ,則(2)中的as.zoo也將as.xts

尋找一個簡單的命令,一行並且不需要庫? 你可以試試這個。

as.numeric(window(producers.price, 2015.1, 2015.2))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM