注意:我重新構造了前面的問題,如評論中所述。將時間序列數據從秒轉換爲小時意味着在R
我使用三種不同的套餐,即,dplyr,data.table和XTS彙總我秒的數據每小時平均表示。但是,令我驚訝的是,與其他兩個人相比,他們的行爲有所不同。與XTS的問題是:
- 結果在一個額外的觀測相比其他兩種
- 每小時平均計算比其他兩個
這裏完全不同的是你的測試目的冷凝代碼:
library(xts)
library(data.table)
library(dplyr)
t2 <- as.POSIXct(seq(from = 1438367408, to = 1440959383, by = 30), origin = "1970-01-01")
dframe <- data.frame(timestamp=t2, power=rnorm(length(t2)))
#using xts
x <- xts(dframe$power,dframe$timestamp)
h1 <- period.apply(x, endpoints(x, "hours"), mean)
h1 <- data.frame(timestamp=trunc(index(h1),'hours'), power=coredata(h1))
#using data.table
h2 <- setDT(dframe)[, list(power= mean(power)) ,(timestamp= as.POSIXct(cut(timestamp, 'hours')))]
#using dpylr
h3 <- dframe %>% group_by(timestamp= as.POSIXct(cut(timestamp, 'hour'))) %>% summarise(power=mean(power))
輸出關於尺寸:
> dim(h1)
[1] 721 2
> dim(h2)
[1] 720 2
> dim(h3)
[1] 720 2
輸出關於每小時手段:
> head(h1)
timestamp power
1 2015-08-01 00:00:00 0.04485894
2 2015-08-01 01:00:00 -0.02299071
> head(h2) # equals to head(h2)
timestamp power
1: 2015-08-01 00:00:00 0.10057538
2: 2015-08-01 01:00:00 -0.07456292
額外觀察H1的情況下:
> tail(h1)
timestamp power
719 2015-08-30 22:00:00 0.069544538
720 2015-08-30 23:00:00 0.011673835
721 2015-08-30 23:00:00 -0.053858563
顯然爲一天的最後一小時有兩個觀察。通常,應該只有一個。
我的系統信息:
> sessionInfo()
R version 3.2.2 (2015-08-14)
Platform: x86_64-apple-darwin13.4.0 (64-bit)
Running under: OS X 10.10.3 (Yosemite)
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] dplyr_0.4.3 data.table_1.9.7 xts_0.9-7 zoo_1.7-12
loaded via a namespace (and not attached):
[1] lazyeval_0.1.10 magrittr_1.5 R6_2.1.1 assertthat_0.1 parallel_3.2.2 DBI_0.3.1 tools_3.2.2
[8] Rcpp_0.12.1 grid_3.2.2 chron_2.3-47 lattice_0.20-33
注:
- 原始數據集可以在link
- 找到我想要解決這個問題,因爲在我的實現方案XTS是近35倍比其餘兩個
請你把這個重複的。 – 2015-10-20 06:59:51
我已經提供了代碼和數據集。我還需要什麼才能使其具有可再現性 –
對不起,但我不想點擊未知鏈接。 – 2015-10-20 07:02:03