2017-07-18 180 views
0

编辑:我遇到了一个额外问题,因此编辑问题: 将小时数据聚合到日常平均值并过滤1个数据点(16: 00),我每天都有相同数量的数据点(每天1个)。但是,由于我想要对数据帧进行分析,如果在16:00得到数据点之前运行代码,我不会有同样多的行。因此,如果没有可用的数据点,我正在考虑添加一行(带日期和NA值)。我添加代码,那么它应该是有道理的。R-NA每小时时间序列的特定小时数

is.installed <- function(mypkg){ 
    is.element(mypkg, installed.packages()[,1]) 
} 
if (!is.installed("ggplot2")){ 
    install.packages("ggplot2") 
} 
if (!is.installed("lubridate")){ 
    install.packages("lubridate") 
} 
if (!is.installed("openxlsx")){ 
    install.packages("openxlsx") 
} 
library(ggplot2) 
library(lubridate) 
library(openxlsx) 


Storico_G <- read.xlsx(xlsxFile = "http://www.snamretegas.it/repository/file/Info-storiche-qta-gas-trasportato/dati_operativi/2017/DatiOperativi_2017-IT.xlsx",sheet = "Storico_G", startRow = 1, colNames = TRUE) 

Storico_G1 <- read.xlsx(xlsxFile = "http://www.snamretegas.it/repository/file/Info-storiche-qta-gas-trasportato/dati_operativi/2017/DatiOperativi_2017-IT.xlsx",sheet = "Storico_G+1", startRow = 1, colNames = TRUE) 

# Selecting Column C,E,R from Storico_G and stored in variable Storico_G_df 
# Selecting Column A,P from Storico_G+1 and stored in variable Storico_G1_df 

Storico_G_df <- data.frame(Storico_G$pubblicazione,Storico_G$IMMESSO, Storico_G$`RICONSEGNATO.(1)`, Storico_G$BILANCIAMENTO.RESIDUALE) 
Storico_G1_df <- data.frame(Storico_G1$pubblicazione, Storico_G1$`SBILANCIAMENTO.ATTESO.DEL.SISTEMA.(SAS)`) 


# Conerting pubblicazione in date format and time 
Storico_G_df$pubblicazione <- ymd_h(Storico_G_df$Storico_G.pubblicazione) 
Storico_G1_df$pubblicazione <- ymd_h(Storico_G1_df$Storico_G1.pubblicazione) 


# Selecting on row which is having 4PM value in Storico_G+1 excel sheet tab 
Storico_G1_df <- subset(Storico_G1_df, hour(Storico_G1_df$pubblicazione) == 16) 
rownames(Storico_G1_df) <- 1:nrow(Storico_G1_df) 

# Averaging hourly values to 1 daily data point in G excel sheet tab 
Storico_G_df$Storico_G.pubblicazione <- strptime(Storico_G_df$Storico_G.pubblicazione, "%Y_%m_%d_%H") 
storico_G_df_agg <- aggregate(Storico_G_df, by=list(day=format(Storico_G_df$Storico_G.pubblicazione, "%F")), FUN=mean, na.rm=TRUE) 

最初的问题:我用下面的斗争:我有一个小时的时间序列,它已经包含在指定时间内来港定居。无论如何,我决定在16:00以外的每个值都分配新来港定居人士。基本上,我只想使用一个数据打印,但仍然保留时间戳,因为我需要绘制正常的小时数据(每天有24个数据点)

或者,我可以绘制完整数据的日平均值并在每天16:00的数据点旁边以确保对齐,这显然意味着创建完整时间序列的每日平均值,并且仅在每天16:00的数据点上创建日期平均值。我可以解决我的小难题

欢呼声

回答

1

您的代码不适用于包xlsx,所以我无法处理您的实际数据。这是一个可重现的虚假数据检验。

d <- data.frame(time=paste0("2017_07_",rep(10:15, each=24),"_", 
          formatC(0:23, flag="0", width=2)), 
       value=cumsum(rnorm(24*6)) ) 

d$time <- strptime(d$time, "%Y_%m_%d_%H") 

dagg <- aggregate(d, by=list(day=format(d$time, "%F")), FUN=mean, na.rm=TRUE)[,-2] 
dagg$day <- strptime(dagg$day, format="%F") 

plot(d, type="l", las=1) 
lines(dagg, col=2) 

此外,您的数据似乎搞砸了,检查出例如这些时间戳:

2017_07_04_21 
2017_07_04_22 
2017_07_04_23 
2017_07_04_00 <-- day 05? 
2017_07_04_01 
2017_07_04_02 
2017_07_04_03 
2017_07_04_04 
2017_07_04_05 
2017_07_05_06 
2017_07_05_07 
+0

嗨浆果,非常感谢你!我用OPENXLSX,抱歉应该补充说。需要看看时间戳。欢呼声 –

相关问题