我的例子。
一些数据:
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]]]
然而,这并不成功。
答案 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
date
个match
对象,然后使用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}}