Commit 64062625 by Jan Wijffels

Add lubridate failover strategy if time/date is not in correct format

parent c869fadc
......@@ -75,6 +75,11 @@ read_citizenair <- function(file = system.file(package = "citizenair", "data-raw
#' x <- read_citizenair(filename)
#' meta <- as.data.frame(x, type = "meta")
#' measurements <- as.data.frame(x, type = "measurements")
#'
#' filename <- system.file(package = "citizenair", "data-raw", "Test_LeuvenairVMM_v3.xls")
#' x <- read_citizenair(filename)
#' meta <- as.data.frame(x, type = "meta")
#' measurements <- as.data.frame(x, type = "measurements")
as.data.frame.citizenair_userdata <- function(x, row.names, optional, ..., type = c("meta", "measurements")){
type <- match.arg(type)
if(type == "meta"){
......@@ -201,5 +206,29 @@ read_sheet_measurements <- function(file, sheet, sheet_info = read_sheet_info(fi
stop("Datum + Tijd not present in data")
}
x <- data.table::setnames(x, old = colnames(x)[idx], new = c("datum", "tijd"))
if(all(is.na(x$datum)) || all(is.na(x$tijd))){
## failover strategy - maybe data is text and not dates ...
suppressWarnings(
message <- capture.output(
y <- readxl::read_excel(path = file, sheet = sheet,
range = cellranger::cell_limits(ul = c(sheet_info$data_start, sheet_info$measurements_columns[1]),
lr = c(sheet_info$data_start + sheet_info$data_n - 1, sheet_info$measurements_columns[2])),
col_names = sheet_info$measurements_fields, guess_max = 10000,
col_types = c("text", "text", rep("numeric", length(sheet_info$measurements_fields) - 2))),
type = "message"))
class(y) <- c("data.frame", "citizenair_rawdata")
idx <- match(c("datum", "tijd"), table = tolower(colnames(y)))
y <- data.table::setnames(y, old = colnames(y)[idx], new = c("datum", "tijd"))
## try to fill data based on parsed text
idx <- which(is.na(x$datum))
if(length(idx) > 0){
x$datum[idx] <- lubridate::parse_date_time(y$datum[idx], "d/m/Y", locale = "Dutch_Belgium.1252", tz = "UTC")
}
idx <- which(is.na(x$tijd))
if(length(idx) > 0){
x$tijd[idx] <- lubridate::parse_date_time(y$tijd[idx], "H!:!M:!S", locale = "Dutch_Belgium.1252", tz = "UTC")
}
}
x
}
......@@ -33,4 +33,9 @@ filename <- system.file(package = "citizenair", "data-raw", "citizenair-example.
x <- read_citizenair(filename)
meta <- as.data.frame(x, type = "meta")
measurements <- as.data.frame(x, type = "measurements")
filename <- system.file(package = "citizenair", "data-raw", "Test_LeuvenairVMM_v3.xls")
x <- read_citizenair(filename)
meta <- as.data.frame(x, type = "meta")
measurements <- as.data.frame(x, type = "measurements")
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment