3

私の質問は、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
4

3 に答える 3

6

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-16T12:07:46.243 に答える
4

日時が「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-16T07:44:14.083 に答える
1

これが data.frame の場合、各エントリの時刻を新しい列に抽出することから始め、各行に「ピーク」フラグを付けてタグ付けすると、作業がはるかに簡単になります。曜日についても同様です。約 350k 行しかないため、これはかなり高速で、1 回限りの作業になるため、次のような醜いことを行うことができます。

# 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

これで、ピーク時のレコードのみを簡単に選択できます。これは、グラフのサブセットがはるかに小さくなり、50,000 レコード未満になります。

mypeakdata <- subset(mydata, peak)

さまざまな仮説を使用してこのような分析を多数行うことになると確信しているため、時間、曜日などのさまざまな列を data.frame に追加してそのままにしておくことをお勧めします。この大きな data.frame を次のように保存します。

save(mydata, 'mydata_version_2012-06-16_8h58.RData')
于 2012-06-16T07:38:12.503 に答える