2017-02-21 35 views
1

データは0.1秒間隔または10秒間隔で1秒間表示されます 24 * 60 * 60 * 10に基づいて1日に864000行。時間ステップ0.1秒〜30分(UTC小数点時間)

私のデータに列の平均値(風速とその他の変数はここには表示されていません)を0.1秒の時間ステップから30分に集計して求めます。だから、データは、(1日の)48本のラインに864000行から集約されます

入力:

  tms Hr Min Sec Wind speed 
7/13/2014 0:00 0 0 0 3.45 
7/13/2014 0:00 0 0 0.1 52.34 
7/13/2014 0:00 0 0 0.2 1.23 
7/13/2014 0:00 0 0 0.3 4.3 
7/13/2014 0:00 0 0 0.4 1.34 
7/13/2014 0:00 0 0 0.5 3.6 

出力は、私が見てみたい:時給平均ため

Year Month Day Hr Wind speed 
7/13/2014 7 13 0 21.92 
7/13/2014 7 13 0.5 29.38 
7/13/2014 7 13 1 24.18 
7/13/2014 7 13 1.5 1.70 
7/13/2014 7 13 2 1.80 

私のコードを、私はしたいです(1時間ではなく)30分までにデータを集計するように変更します。ここでdattms列のないデータなので、日付列を追加しました。

library(data.table) 
library(xts) 
dat <- data.table(dat) 
tms <- as.POSIXct(seq(0,24*(60*60*10)-1,by=1),origin="2014-07-13",tz="UTC") 
xts.ts <- data.frame(xts(dat,tms)) 

は今、私は私のデータに

Aut <- data.frame(tms,xts.ts, check.names=FALSE, row.names=NULL) 
mean2 <- aggregate(Aut, 
        list(hour=cut(as.POSIXct(Aut$tms), "hour")), 
        mean) 

tms列を追加しました。しかし、これはでも時給を修正ません。私は自分のデータの平均を30分もしたい。助言がありますか?

+0

出力が欲しいものは私には分かりません。 xtsでは時間による集計は簡単ですが、再現可能な入力( 'dat'は定義されていません)または期待する出力の例を提供していません。それらの2つのものを提供すれば、おそらくいくつかの回答が得られます。 –

+0

私はそれを編集しましたが、おそらくフォーマットが必要です – Wisconsin

+0

@JoshuaUlrich私はそれを編集して出力を提供しましたが、フォーマットに何が起こったのかは分かりません。私は0.1秒の時間ステップから30分(0.5時間)までの平均値を求めています。データを864000行から48行に1日換算すると、 – Wisconsin

答えて

1

私は私のコメントで述べたように、あなたはxts::period.applyで簡単にこれを行うことができます。

library(xts) 
options(digits.secs = 1) # display fractional seconds 
# create 1 day of timestamps that are 0.1 seconds apart 
tms <- as.POSIXct(seq(0, 86400-1, by=0.1), origin="2014-07-13", tz="UTC") 
# create an xts object with some random data and the times created above 
set.seed(21) 
xts.ts <- xts(runif(length(tms), 0, 50), tms) 
# use period.apply and endpoints to calculate the 30-minute means 
mean30min <- period.apply(xts.ts, endpoints(xts.ts, "mins", 30), mean) 
# round up to next 30-minute period 
mean30min <- align.time(mean30min, 60*30) 

あなたは結果が追加された追加の列を持つdata.tableまたはdata.frameになりたい場合は、あなたが行うことができますそれは凝集後に容易に起こる。

library(data.table) 
dt.mean30 <- as.data.table(mean30min) 
dt.mean30[, Month := .indexmon(mean30min) + 1] 
dt.mean30[, Day := .indexmday(mean30min)] 
dt.mean30[, Hr := .indexhour(mean30min) + .indexmin(mean30min)/60] 
+0

@ Joshuhaありがとうございます。私が期間を適用したとき.apply "エンドポイントのエラー(xts.ts、" min "、30):サポートされていない"引数 "on tmsの長さは864000(修正しようとすることができます) – Wisconsin

+0

@Kristofersen ..... – Wisconsin

+0

@ウィスコンシン:修正済み。私の編集を参照してください。 –

関連する問題