2017-02-21 105 views
1

我的數據間隔爲0.1秒或10行一秒 因此,基於24 * 60 * 60 * 10的864000行一天。時間步長從UTC秒數的0.1秒到半小時(30分鐘)

我想在我的數據中找到列(風速和其他變量不顯示在這裏)的意思,將它從0.1秒時間步聚合到半小時。因此,數據將從864000行彙總到48線(一天)

輸入:

  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 

我每小時平均代碼,我想以半小時(而不是一小時)更改彙總數據。其中dat是沒有tms列的數據:所以我添加了一個日期列。

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)) 

現在我加入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) 

但是,這甚至不是每小時正確的。我希望在半小時之內掌握我的數據。有什麼建議麼?

+0

我不清楚你想要輸出的是什麼。使用xts時間聚合很容易,但是您沒有提供可重複的輸入('dat'未定義)或您期望的輸出示例。提供這兩件事情,你可能會收到幾個答案。 –

+0

我編輯它,但可能它需要格式化 – Wisconsin

+0

@JoshuaUlrich我編輯它,並提供輸出,但不知道格式化發生了什麼。我想要從0.1秒時間步到30分鐘(0.5小時)的平均值。因此將數據從864000行滾動到48行,每天 – 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謝謝。當我申請期間。應用程序「端點錯誤(xts.ts,」min「,30):不支持」on「參數」也tms長度應該是864000(我可以嘗試修復) – Wisconsin

+0

@Kristofersen ..... – Wisconsin

+0

@Wisconsin:固定。看我的編輯。 –