knitr::opts_chunk$set(results = 'asis', echo = FALSE, warning = FALSE)
# needed for trouble shooting
boo_QC <- TRUE
if (boo_QC) {
  myConfig <- file.path(system.file(package = "ContDataQC")
                      , "extdata", "config.ORIG.R")
  source(myConfig)
}## IF ~ boo_QC

DATA FILE INFORMATION

  # Report Info
  myReportDate <- format(Sys.Date(),ContData.env$myFormat.Date)
  cat(paste("**Report Date:** ",myReportDate,"\n\n",sep = ""))
  myUser <- Sys.getenv("USERNAME")
  cat(paste("**Generated By:** ",myUser,"\n\n",sep = ""))

  #filename
  cat("**Filename:** ",strFile,"\n\n",sep = "")

  cat(paste("**SiteID:** ",strFile.SiteID,"\n\n",sep = ""))

  cat(paste("**Period of Record, Requested:** ",fun.myData.DateRange.Start," to ",fun.myData.DateRange.End,sep = "",collapse = "\n\n"))

  # myTimeDiff <- difftime(data.import[11,ContData.env$myName.DateTime],data.import[10,ContData.env$myName.DateTime],units="mins")
  #x <- data.import[,ContData.env$myName.DateTime]
  myT <- strptime(data.import[,ContData.env$myName.DateTime
                              ], format = ContData.env$myFormat.DateTime)
  myTimeDiff.all <- difftime(myT[-1], myT[-length(myT)] ,units = "mins")
  myTimeDiff <- median(as.vector(myTimeDiff.all), na.rm = TRUE)

  cat(paste("\n\n**Period of Record, Actual:** "
            , min(data.import[,myName.Date])
            , " to "
            , max(data.import[,myName.Date])
            , "\n\n"
            , sep = ""))

  cat(paste("**Recording Interval:** ", myTimeDiff[1], " minutes\n\n" ,sep = ""))

#  cat(paste("**Data Type:** ",strFile.DataType,"\n\n",sep=""))  # need to do better

   myParameters <- ContData.env$myNames.DataFields[ContData.env$myNames.DataFields %in% names(data.import) == TRUE] 
   myParameters.Lab <- ContData.env$myNames.DataFields.Lab[ContData.env$myNames.DataFields %in% names(data.import) == TRUE]
 #cat("**Parameters:** ",paste(myParameters.Lab,", ",sep=""),"\n\n",sep="")
  # above line not working, preventing pandoc conversion to WORD
  #cat("**Included Parameters:** \n\n")
  cat("**Parameters Included:** "
      , paste(myParameters,", ",sep = ""), "\n\n",sep = "")

  # new stuff, 20220520
  myParameters.Flags <-  ContData.env$myNames.Flags[ContData.env$myNames.Flags
                                              %in% names(data.import) == TRUE]
  cat("**Parameters with Flags:**"
      , paste(myParameters.Flags, ", ", sep = "")
      , "\n\n"
      , sep = "")

FLAGS

Each data point is checked by each of the four QC tests below.

Flags are assigned to each data point (a single measured parameter at a unique point in time) first by each of the QC tests below. Flags are assigned numerical values;

cat(paste("* **"
          ,ContData.env$myFlagVal.Pass
          , "** = Pass"
          , sep = ""))
cat("\n")
cat(paste("* **"
          , ContData.env$myFlagVal.Suspect
          , "** = Suspect"
          , sep = ""))  
cat("\n")
cat(paste("* **",ContData.env$myFlagVal.Fail
          , "** = Fail"
          , sep = ""))
cat("\n")
cat(paste("* **",ContData.env$myFlagVal.NoData
          , "** = No Data or Not Applicable (NA)"
          , sep = ""))

Overall flags are assigned by examining the results of the four tests below.

cat(paste("* **",ContData.env$myFlagVal.Pass
          , "** = no Fail or Suspect and at least one Pass"
          , sep = ""))
cat("\n")
cat(paste("* **",ContData.env$myFlagVal.Suspect
          , "** = no Fail and at least one Suspect"
          , sep = "")) 
cat("\n") 
cat(paste("* **", ContData.env$myFlagVal.Fail
          , "** = at least one Fail"
          , sep = ""))
cat("\n")
cat(paste("* **", ContData.env$myFlagVal.NoData
          , "** = all tests were Missing Data"
          , sep = ""))

The thresholds used in the tests are defined in the config file.

New stuff

20220520

# Check for parameters and flags
# when have both create table

# Parameters with Flags
p <- "Water.Temp.C"
p_flag <- paste0("Flag.", p)
df_p <- data.import[data.import[, p_flag] != "P",  ]
t_p <- table(df_p[, "Date"], df_p[, p_flag])
cap_p <- paste0("Flags by Date, ", p)
knitr::kable(t_p, caption = cap_p)

## NA
# NA by date
df_NA <- data.import[is.na(data.import[, p]), ]
t_p_NA <- table(df_NA[, "Date"], useNA = "ifany")
cap_NA <- paste0("Missing Data by Date, ", p)
knitr::kable(t_p_NA, caption = cap_NA)
cap_NA_DateTime <- paste0("Missing Data by Date Time, ", p)
knitr::kable(df_NA[, c("Date.Time", p)])

# Detailed Flags
flag_names <- c("Gross", "Spike", "RoC", "Flat")
col_p_flags <- paste0("Flag.", flag_names, ".", p)
df_p_flags <- df_p[rownames(t_p) %in% df_p[, "Date"]
                   , c("Date.Time", p, p_flag, col_p_flags)]
df_p_flags_kable <- df_p_flags[!is.na(df_p_flags[, p]), ]
# change names so shorter
names(df_p_flags_kable)[grepl("Flag.Gross", names(df_p_flags_kable))] <- "Gross"
names(df_p_flags_kable)[grepl("Flag.Spike", names(df_p_flags_kable))] <- "Spike"
names(df_p_flags_kable)[grepl("Flag.RoC", names(df_p_flags_kable))] <- "RoC"
names(df_p_flags_kable)[grepl("Flag.Flat", names(df_p_flags_kable))] <- "Flat"
cap_p_flags <-  paste0("Flags by Date Time, ", p)
knitr::kable(df_p_flags_kable, caption = cap_p_flags)


leppott/ContDataQC documentation built on Jan. 5, 2025, 10:12 a.m.