![](/img/trans.png)
[英]How to select the earliest date in a month from a Date series in 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]
如果您需要時間計算方面的幫助,請查看此答案。您將需要zoo
和lubridate
軟件包。以星期,月份,季度和年為單位獲取日期之間的差額
希望能幫助到你 :)
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.