簡體   English   中英

按日期和時間選擇時間序列對象的間隔

[英]Select interval of time series object by date and time

我的問題是如何管理空氣質量數據庫中的日期和時間,該數據庫從2002年到2008年每天每隔十分鍾保存一次數據。

我想生成幾個分析和圖表,但僅參考從早上6點到早上8點的早上高峰時段,我試圖在所需的時間間隔內生成圖表,但R工具總是在24小時內繪制圖表。因此,歪曲了高峰時段的可用數據。

我非常感謝您就如何在高峰時段選擇和繪制間隔以及如何生成幾個圖表的指導。

我有下一個腳本來生成日期間隔,但我想要小時間隔(6-8 am)並僅繪制間隔數據:

# select interval
start.date = as.POSIXct("2007-03-27 05:00", tz = "GMT")
end.date = as.POSIXct("2007-05-27 05:00", tz = "GMT")
subdata = subset(mydata, date >= start.date & date <= end.date,
select = c(date, nox, co))
#
#plot the variables

我建議你使用時間序列類而不是data.frame。 使用xts可以輕松地按每天的時間間隔進行子集:

# use DWin's example data
Data <- data.frame(a=rnorm(240),
  dtm=as.POSIXct("2007-03-27 05:00", tz="GMT")+3600*(1:240))
# create xts object
library(xts)
x <- xts(Data[,"a"], Data[,"dtm"])
# subset by time of day
y <- x["T06:00/T08:00"]
# plot
plot(y)  # plots all 24 hours of each day
# use chartSeries from quantmod to avoid above behavior
library(quantmod)
chartSeries(y)

如果您的日期時間位於名為“dtm”的列中,則此代碼應獲取6A至8A區間內的記錄

dfrm <- data.frame(a=rnorm(24),  
                   dtm =as.POSIXct("2007-03-27 05:00", tz='GMT') +3600*(1:24) )     
    sub6_8A <- subset(dfrm, strftime(dtm, "%H", tz="GMT") %in% c('06','07','08') )
sub6_8A
           a                 dtm
1  0.5020823 2007-03-27 06:00:00
2 -0.7455312 2007-03-27 07:00:00
3  1.8035086 2007-03-27 08:00:00

你也可以使用帶有“[[”的索引方法,但是如果你有NA,它們會被拖延,除非你明確排除它們。

如果這是一個data.frame,我首先將每個條目的時間提取到一個新列中,然后用“peak”標記標記每一行,然后使用它變得更容易。 同樣適用於星期幾。 由於只有大約350k行,這將是相當快的,它是一次性的,所以你可以做一些丑陋的事情:

# create some fake data
t1 <- as.POSIXct(paste('2012-06-16 0', 1:9, ':00', sep=''), tz='GMT')
N <- length(t1)
mydata <- data.frame(timestamp=t1, co=runif(N, 1,30), nox=runif(N, 5,50))

# extract out the hour of day
mydata$hour <- gsub('^.* ', '', as.character(t1))
# is this a peak time?
mydata$peak <- regexpr('^0[678]', mydata$hour) >0

現在,您可以輕松選擇那些來自高峰時段的記錄 - 這將是圖表中小得多的子集 - 少於50k記錄。

mypeakdata <- subset(mydata, peak)

由於我確定你將使用不同的假設做很多這樣的分析,我建議你在你的data.frame中添加各種列,例如一天中的小時,一周中的一天等,然后將它們留在那里,保存這個大數據。如:

save(mydata, 'mydata_version_2012-06-16_8h58.RData')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM