2016-09-01 31 views
0

我已經得到的數據是這樣的:如何分鐘數據彙總到週數據

 Date  Time Global_active_power 
1 16/12/2006 17:24:00    4.216 
2 16/12/2006 17:25:00    5.360 
3 16/12/2006 17:26:00    5.374 
4 16/12/2006 17:27:00    5.388 
5 16/12/2006 17:28:00    3.666 
6 16/12/2006 17:29:00    3.520 

因爲我需要進行時間序列分析,我可能需要聚合這些基於分鐘數據來每日,每週,每月或每季度的數據。不過,我試圖使用下面的代碼獲取monthly-和基於季度數據(基於功能as.yearmonas.yearqtr):

agg_Month <-aggregate(tmp_hPower,by=list(as.yearmon(tmp_hPower$Date,'%d/%m/%Y')), 
FUN = mean, na.rm = TRUE) 

似乎有像as.yearweek無功能,所以我怎麼能獲取基於每日,每週的數據,甚至基於小時的數據?

+1

看到[這個問題](http://stackoverflow.com/questions/25866436/extract-week-number-from-posixct-object)。 – eipi10

回答

0

下面是一個使用dplyr封裝選項:

library(dplyr) 
library(lubridate) 
library(zoo) 

# Fake data 
set.seed(4999) 
dat = data.frame(time=seq(as.POSIXct("2015-01-01"), 
          as.POSIXct("2016-12-31"), length.out=1000), 
       value=rnorm(1000)) 

您可以添加時間組,讓您按周,月總結等

dat = dat %>% 
    mutate(year_day = paste0(year(time),'-', yday(time)), 
     year_week = paste0(year(time),"-",strftime(time,"%W")), 
     year_mon = as.yearmon(time), 
     year_qtr = as.yearqtr(time)) 

現在,周總結。您可以按照類似的方式按天,月等進行總結。

dat.by.week = dat %>% 
    group_by(year_week) %>% 
    summarise(value=mean(value)) 

此外,您實際上不必將時間組添加到原始數據。你可以在飛行中完成所有的事情。例如:

dat.by.week = dat %>% 
    mutate(year_week = paste0(year(time),"-",strftime(time,"%W"))) %>% 
    group_by(year_week) %>% 
    summarise(value=mean(value)) 
2

如果您將data.frame轉換爲xts對象,這非常簡單。

# original data 
tmp_hPower <- read.table(text="  Date  Time Global_active_power 
1 16/12/2006 17:24:00    4.216 
2 16/12/2006 17:25:00    5.360 
3 16/12/2006 17:26:00    5.374 
4 16/12/2006 17:27:00    5.388 
5 16/12/2006 17:28:00    3.666 
6 16/12/2006 17:29:00    3.520") 
# xts object from original data 
library(xts) 
x <- with(tmp_hPower, xts(Global_active_power, 
    as.POSIXct(paste(Date,Time), format="%d/%m/%Y %H:%M:%S"))) 
# use period.apply and endpoints to aggregate to any frequency 
period.apply(x, endpoints(x, "hours"), mean) # hourly 
period.apply(x, endpoints(x, "days"), mean) # daily 
period.apply(x, endpoints(x, "weeks"), mean) # weekly