如何为时间序列对象分配索引或访问索引?

时间:2016-09-29 18:17:48

标签: r

我的例子。

一些数据:

  set.seed(1000)
  dates<- seq.Date(as.Date("2013-01-01"), as.Date("2013-01-31"),by='days')
  y <- round(3 * 3 + rnorm(31),1)
  df<- cbind.data.frame(dates, y)

现在我想访问df以获取y from "2013-01-25" to "2013-01-31"

的值
  estimtaionPeriod <- as.Date(c("2013-01-25", "2013-01-31"))
  length.estimationPeriod.values <-df$dates[estimtaionPeriod[[1]] : estimtaionPeriod[[2]]]

但我得NAs。所以我想我必须定义一个时间序列对象:

  library(zoo)
  library(xts)


  ts <- ts(df$y, start=as.Date("2013-01-01"), end=as.Date("2013-01-31"))
  length.estimationPeriod.values <-ts[estimtaionPeriod[[1]] : estimtaionPeriod[[2]]]


  ts <- zoo(df$y, order.by = as.Date("2013-01-01"), as.Date("2013-01-31"))
  length.estimationPeriod.values <-ts[estimtaionPeriod[[1]] : estimtaionPeriod[[2]]]

然而,这并不成功。

3 个答案:

答案 0 :(得分:2)

你的方法非常接近。一种可能的解决方案是使用which函数来查找起点和终点的索引。例如:

estimtationPeriod <- as.Date(c("2013-01-25", "2013-01-31"))

startstop=match(estimtationPeriod , df$dates)
df$y[startstop[1] : startstop[2]]

答案 1 :(得分:2)

1)子集尝试在指定条件下对df进行子集化:

subset(df, dates >= "2013-01-25" & dates <= "2013-01-31")

2)window.zoo 另一种可能性是将系列转换为动物园并使用window

library(zoo)
z <- read.zoo(df)
w <- window(z, start = "2013-01-25", end = "2013-01-31")
fortify.zoo(w) # optional - to convert back to data.frame

3)xts xts对此有一个特殊的索引表示法:

library(xts)
x <- as.xts(read.zoo(df))
w <- x["2013-01-25/2013-01-31"]
fortify.zoo(w) # optional - to convert back to data.frame

答案 2 :(得分:1)

您可以创建seq datematch对象,然后使用y获取相应的df$y[match(seq(as.Date("2013-01-25"), as.Date("2013-01-31"), "days"), df$dates)] #[1] 8.4 9.6 7.2 9.3 9.6 10.2 8.8

{{1}}