2

我有一个从 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 的时间间隔,并将其存储到一个名为“中午”值的变量中。谢谢!

4

2 回答 2

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
于 2013-04-23T12:55:55.080 回答
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

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

于 2013-04-23T13:02:29.897 回答