从时间序列中选择日期范围

时间:2013-04-23 12:46:41

标签: r

我有一个从10月到2月的时间序列对象。下面我将向您展示它的一些价值。

1995-10-13 04:00:00 460.5
1995-10-13 05:00:00 549.9
1995-10-13 06:00:00 648.8
1995-10-13 07:00:00 684.4
1995-10-13 08:00:00 652.3
1995-10-13 09:00:00 629.8
1995-10-13 10:00:00 582.6
1995-10-13 11:00:00 565.5
1995-10-13 12:00:00 543.5
1995-10-13 13:00:00 542.8

在此范围内,我想选择每天10:00到15:00的间隔,并将其存储到名为“midday”值的变量中。 谢谢!

2 个答案:

答案 0 :(得分:2)

您可以使用xts进行时间序列分析。 xts提供了对时间序列数据进行子集化的便捷方法。对于。例如

txt <- '1995-10-13 04:00:00 460.5
1995-10-13 05:00:00 549.9
1995-10-13 06:00:00 648.8
1995-10-13 07:00:00 684.4
1995-10-13 08:00:00 652.3
1995-10-13 09:00:00 629.8
1995-10-13 10:00:00 582.6
1995-10-13 11:00:00 565.5
1995-10-13 12:00:00 543.5
1995-10-13 13:00:00 542.8'

DF <- read.table(text = txt, stringsAsFactors = FALSE)

xts(DF$V3, as.POSIXct(paste(DF$V1, " ", DF$V2)))
##                      [,1]
## 1995-10-13 04:00:00 460.5
## 1995-10-13 05:00:00 549.9
## 1995-10-13 06:00:00 648.8
## 1995-10-13 07:00:00 684.4
## 1995-10-13 08:00:00 652.3
## 1995-10-13 09:00:00 629.8
## 1995-10-13 10:00:00 582.6
## 1995-10-13 11:00:00 565.5
## 1995-10-13 12:00:00 543.5
## 1995-10-13 13:00:00 542.8

XTS <- xts(DF$V3, as.POSIXct(paste(DF$V1, " ", DF$V2)))
XTS
##                      [,1]
## 1995-10-13 04:00:00 460.5
## 1995-10-13 05:00:00 549.9
## 1995-10-13 06:00:00 648.8
## 1995-10-13 07:00:00 684.4
## 1995-10-13 08:00:00 652.3
## 1995-10-13 09:00:00 629.8
## 1995-10-13 10:00:00 582.6
## 1995-10-13 11:00:00 565.5
## 1995-10-13 12:00:00 543.5
## 1995-10-13 13:00:00 542.8

XTS["T10:00:00/T15:00:00"]
##                      [,1]
## 1995-10-13 10:00:00 582.6
## 1995-10-13 11:00:00 565.5
## 1995-10-13 12:00:00 543.5
## 1995-10-13 13:00:00 542.8

答案 1 :(得分:0)

你有一个xts对象。这个解决方案是,如果您首先在数据框中包含数据,我会这样做,使用strptime从小时字符向量中提取小时数,然后进行一些逻辑子集化

df <- read.table( text = "1995-10-13 04:00:00 460.5
1995-10-13 05:00:00 549.9
1995-10-13 06:00:00 648.8
1995-10-13 07:00:00 684.4
1995-10-13 08:00:00 652.3
1995-10-13 09:00:00 629.8
1995-10-13 10:00:00 582.6
1995-10-13 11:00:00 565.5
1995-10-13 12:00:00 543.5
1995-10-13 13:00:00 542.8
")
colnames(df) <- c( "Day" , "Hour" , "Value" )

hours <- strptime( df$Hour , format = "%H:%M:%S")$hour
df$Midday <- hours >= 10 & hours <= 15
df

          Day     Hour Value Midday
1  1995-10-13 04:00:00 460.5  FALSE
2  1995-10-13 05:00:00 549.9  FALSE
3  1995-10-13 06:00:00 648.8  FALSE
4  1995-10-13 07:00:00 684.4  FALSE
5  1995-10-13 08:00:00 652.3  FALSE
6  1995-10-13 09:00:00 629.8  FALSE
7  1995-10-13 10:00:00 582.6   TRUE
8  1995-10-13 11:00:00 565.5   TRUE
9  1995-10-13 12:00:00 543.5   TRUE
10 1995-10-13 13:00:00 542.8   TRUE

使用xts作为@geektrader建议可能更适合您的需求,因为它是为时间序列分析而构建的。