我的问题是如何管理空气质量数据库中的日期和时间,该数据库从2002年到2008年每天每10分钟保存一次数据。
我想生成几个分析和图表,但仅指从早上6:00到8:00的早上高峰时间。我尝试在需要的时间间隔内生成图表,但R工具总是绘制一天中的24小时,因此扭曲了高峰期的可用数据。
我将非常感谢您关于如何选择和绘制仅在高峰时段的间隔以及如何生成几个图表的指导。
我有生成日期间隔的下一个脚本,但我想汇总小时间隔(上午6-8点)并仅绘制间隔数据:
# 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发布于 2012-06-16 20:07:46
我建议您使用时间序列类而不是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)发布于 2012-06-16 15:44:14
如果您的日期-时间位于名为'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,它们将被拖走,除非您特别排除它们。
发布于 2012-06-16 15:38:13
如果这是一个data.frame,我会首先将每个条目的时间提取到一个新的列中,然后用“data.frame”标记每一行,然后使用它就会变得容易得多。每周的几天也是一样。因为只有大约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中添加不同的列,例如一天中的小时、一周中的某一天等,并将它们保留在那里,然后保存这个大的data.frame,如下所示:
save(mydata, 'mydata_version_2012-06-16_8h58.RData')https://stackoverflow.com/questions/11060224
复制相似问题