![](/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.