diff --git a/R/importWaterML1.r b/R/importWaterML1.r index 8531b0c77eefa5ef6b81839219791148809bc094..f8c2d483f70de29d3a0c156350046ab079a49d85 100644 --- a/R/importWaterML1.r +++ b/R/importWaterML1.r @@ -95,6 +95,7 @@ importWaterML1 <- function(obs_url,asDateTime=FALSE, tz=""){ timeSeries <- xpathApply(doc, "//ns1:timeSeries", namespaces = ns) + if(0 == length(timeSeries)){ message("Returning an empty dataset") df <- data.frame() @@ -103,6 +104,8 @@ importWaterML1 <- function(obs_url,asDateTime=FALSE, tz=""){ } attList <- list() + dataColumns <- c() + qualColumns <- c() for (i in 1:length(timeSeries)){ @@ -184,9 +187,12 @@ importWaterML1 <- function(obs_url,asDateTime=FALSE, tz=""){ if("qualifiers" %in% names(df)){ qualName <- paste(valueName,"cd",sep="_") - names(df)[which(names(df) == "qualifiers")] <- qualName + names(df)[which(names(df) == "qualifiers")] <- qualName + qualColumns <- c(qualColumns, qualName) } + dataColumns <- c(dataColumns, valueName) + if("dateTime" %in% attributeNames){ datetime <- xpathSApply(subChunk, "ns1:value/@dateTime",namespaces = chunkNS) @@ -274,6 +280,8 @@ importWaterML1 <- function(obs_url,asDateTime=FALSE, tz=""){ columnsOrderd <- columnsOrdered[columnsOrdered %in% names(df)] + + df <- df[,columnsOrderd] names(extraSiteData) <- make.unique(names(extraSiteData)) @@ -341,13 +349,17 @@ importWaterML1 <- function(obs_url,asDateTime=FALSE, tz=""){ } - sortingColumns <- c("agency","site_no","dateTime","tz_cd") - dataColumns <- names(mergedDF)[!(names(mergedDF) %in% sortingColumns)] - dataColumns <- dataColumns[-grep("_cd",dataColumns)] +# sortingColumns <- c("agency","site_no","dateTime","tz_cd") +# dataColumns <- names(mergedDF)[!(names(mergedDF) %in% sortingColumns)] +# dataColumns <- dataColumns[-grep("_cd",dataColumns)] + sortingColumns <- names(mergedDF)[!(names(mergedDF) %in% c(dataColumns,qualColumns))] + meltedmergedDF <- melt(mergedDF,id.vars=sortingColumns) meltedmergedDF <- meltedmergedDF[!is.na(meltedmergedDF$value),] - mergedDF2 <- dcast(meltedmergedDF, dateTime+site_no+agency+tz_cd~variable, drop=FALSE) + + castFormula <- as.formula(paste(paste(sortingColumns, collapse="+"),"variable",sep="~")) + mergedDF2 <- dcast(meltedmergedDF, castFormula, drop=FALSE) dataColumns2 <- !(names(mergedDF2) %in% sortingColumns) mergedDF <- mergedDF2[rowSums(is.na(mergedDF2[,dataColumns2])) != sum(dataColumns2),]