2016-04-02 9 views
1

私は、月と時間に関するデータの平均化に取り組んでいます。 私が使用しているデータは、1つの列で15分の間隔で6ヵ月(1月から6月まで)であり、2番目の列の時間帯には値です。時間単位でデータを集計する方法は?

library(xts) 

data<-read.csv("C:/Users/naman.nagar/Downloads/JAVA &R/15_Minute_Site_ Avg.csv",header=TRUE,stringsAsFactors = FALSE) 
data$Timestamp<-as.POSIXct(strptime(cognos_data$Timestamp,format="%Y-%m-%d %H:%M")) 
data.xts<-xts(x=cognos_data$Wanamaker,cognos_data$Timestamp) 
ep<-endpoints(data.xts,"hours") 
period.apply(data.xts,ep,mean) 

私は上記のコードを使用して得ているデータは次のとおりです:このデータから、今

2015-12-19 10:15:00 1602 
    2015-12-19 11:15:00 1608 
    2015-12-19 12:15:00 1590 
    2015-12-19 13:15:00 1590 
    2015-12-19 14:15:00 1344 
    2015-12-19 15:15:00 1338 
    2015-12-19 16:15:00 1338 
    2015-12-19 17:15:00 1338 
    2015-12-19 18:15:00 1338 
    2015-12-19 19:15:00 1392 
    2015-12-19 20:15:00 1368 
    2015-12-19 21:15:00 1302 
    2015-12-19 22:15:00 1302 
    2015-12-19 23:15:00 1266 
    2015-12-20 00:15:00 1248 
    2015-12-20 01:15:00 1254 
    2015-12-20 02:15:00 1218 
    2015-12-20 03:15:00 1188 

、私は 私は、下記のタラを使用して時間単位の間隔に分間隔からのデータを平均化しています毎月平均化されたデータが欲しい:

2015-12 10:00:00 1389 
    2015-12 11:00:00 1390 
    2015-12 12:00:00 1400 
    2015-12 13:00:00 1396 

手段は額面で平均化した値を取得するために、私は時間ごとのレベルで完全な12月の月の平均化されたデータは、午前12時00分00秒で言う得ると言うこと完全な月の就業時間。

助けてください。 ありがとうございます!

答えて

1

ここではdplyrlubridateパッケージを使用したソリューションです。によると私)私はあなたが複数あるだろうと推定(新しい列がyear_month作成)+時間、ⅱ)グループ:

library(dplyr) 
library(lubridate) 

# just to make it reproducible 
# also added a line at 10:00:00 so that we have at least once more than one value for hour 10 

    data <- structure(list(timestamp = c("2015-12-19 10:00:00", "2015-12-19 10:15:00", 
"2015-12-19 11:15:00", "2015-12-19 12:15:00", "2015-12-19 13:15:00", 
"2015-12-19 14:15:00", "2015-12-19 15:15:00", "2015-12-19 16:15:00", 
"2015-12-19 17:15:00", "2015-12-19 18:15:00", "2015-12-19 19:15:00", 
"2015-12-19 20:15:00", "2015-12-19 21:15:00", "2015-12-19 22:15:00", 
"2015-12-19 23:15:00", "2015-12-20 00:15:00", "2015-12-20 01:15:00", 
"2015-12-20 02:15:00", "2015-12-20 03:15:00"), x = c(400, 1602, 
1608, 1590, 1590, 1344, 1338, 1338, 1338, 1338, 1392, 1368, 1302, 
1302, 1266, 1248, 1254, 1218, 1188)), .Names = c("timestamp", 
"x"), row.names = c(NA, 19L), class = "data.frame") 

# let's have a look to it 
head(data) 
#     timestamp x 
# 1 2015-12-19 10:00:00 400 
# 2 2015-12-19 10:15:00 1602 
# 3 2015-12-19 11:15:00 1608 
# 4 2015-12-19 12:15:00 1590 
# 5 2015-12-19 13:15:00 1590 
# 6 2015-12-19 14:15:00 1344 
# etc. 

は、その後、我々は下のパイプを使用します。 のは、次のようなデータを持っているとしましょうyear_monthと時間は、III))指定した月で時速グループあたりの平均値(つまり要約:

data %>% 
    mutate(year_month=paste(year(timestamp), month(timestamp), sep="-"), 
      hour=hour(timestamp)) %>% 
    group_by(year_month, hour) %>% summarize(mean_x=mean(x)) 

    # year_month hour mean_x 
# (chr) (int) (dbl) 
# 1  2015-12  0 1248 
# 2  2015-12  1 1254 
# 3  2015-12  2 1218 
# 4  2015-12  3 1188 
# 5  2015-12 10 1001 
# 6  2015-12 11 1608 

注時間10

の値が何をしたい、このですか?

+0

、しかし、私は、データの6ヶ月を持っていると私は毎月のデータが時間単位で平均化することにしたいです。あなたの答えは、特定の時間の6ヶ月の完全なデータセットをグループ化して平均化しますが、毎月のデータを毎時平均で平均化する必要があります。データは6か月間であるため、144行(6か月* 24時間)になります。それは意味がありますか? – NAN

+0

私の答えを編集していました;-) –

+0

ありがとうVincent! :-) – NAN

1

我々はdata.tableにこのような何かを行うことができます:ある程度

library(data.table) 
setDT(df)[, .(mean = mean(value)), by = .(year = format(Timestamp, "%Y"), 
              month = format(Timestamp, "%m"), 
              hour = format(Timestamp, "%H"))] 
# year month hour mean 
#1: 2015 12 10 1602 
#2: 2015 12 11 1608 
#3: 2015 12 12 1590 
#4: 2015 12 13 1590 
#5: 2015 12 14 1344 
#6: 2015 12 15 1338 
+0

ありがとう@mtoto。 :) – NAN

関連する問題