首页 文章

R - NAs表示每小时时间序列的特定小时数

提问于
浏览
0

编辑:我遇到了另一个问题,因此编辑问题:另一方面,在每天将小时数据汇总到每日平均值并且每天过滤1个数据点(在16:00)之后,我有相同的数字数据点(每天1个) . 但是,由于我想要连接数据帧,如果在16:00获取数据点之前运行代码,我将不会有相同的行数 . 因此,如果没有可用的数据点,我想添加一行(带有日期和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)

初步问题:我对以下内容感到困惑:我有一个每小时的时间序列,它在特定时间已经包含了NA . 无论如何,我决定还为16:00以外的每个值分配NAs . 基本上,我只想使用一个数据打印,但仍保留时间戳,因为我需要绘制正常的每小时数据(每天24个数据点) .

或者,我可以在每天16:00绘制完整数据的每日平均值以及数据点,以确保对齐 . 这显然意味着创建完整时间序列的每日平均值,并且仅针对每天16:00的数据点进行过滤 .

非常感谢任何帮助我如何解决我的小困境 .

干杯

1 回答

  • 1

    您的代码不适用于包 xlsx ,因此我可以't work with your actual data. Here'是一个可重复的假数据检查 .

    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
    

相关问题