From c79bde7e6e386bc9c9cfe024bfe80072c1742c53 Mon Sep 17 00:00:00 2001 From: unknown <ldecicco@usgs.gov> Date: Mon, 3 Nov 2014 10:03:40 -0600 Subject: [PATCH] Made it a little more automated. --- R/importWaterML1.r | 103 +++++++++++++++++++-------------------------- 1 file changed, 43 insertions(+), 60 deletions(-) diff --git a/R/importWaterML1.r b/R/importWaterML1.r index db842fc3..8d57474a 100644 --- a/R/importWaterML1.r +++ b/R/importWaterML1.r @@ -104,77 +104,60 @@ importWaterML1 <- function(obs_url,asDateTime=FALSE, tz=""){ value <- as.numeric(xpathSApply(subChunk, "ns1:value",namespaces = chunkNS, xmlValue)) - if(asDateTime){ - datetime <- as.POSIXct(strptime(xpathSApply(subChunk, "ns1:value/@dateTime",namespaces = chunkNS),"%Y-%m-%dT%H:%M:%S"), tz="UTC") - - tzHours <- as.numeric(substr(xpathSApply(subChunk, "ns1:value/@dateTime",namespaces = chunkNS), - 24, - nchar(xpathSApply(subChunk, "ns1:value/@dateTime",namespaces = chunkNS))-3)) - tzHoursOff <- substr(xpathSApply(subChunk, "ns1:value/@dateTime",namespaces = chunkNS), - 24, - nchar(xpathSApply(subChunk, "ns1:value/@dateTime",namespaces = chunkNS))) - tzAbbriev <- as.character(zoneAbbrievs[tzHoursOff]) - - datetime <- datetime - tzHours*60*60 - - if(tz != ""){ - attr(datetime, "tzone") <- tz - } - - } else { - datetime <- as.Date(strptime(xpathSApply(subChunk, "ns1:value/@dateTime",namespaces = chunkNS),"%Y-%m-%dT%H:%M:%S")) - } + + attNames <- xpathSApply(subChunk, "ns1:value/@*",namespaces = chunkNS) + attributeNames <- unique(names(attNames)) - qualifier <- as.character(xpathSApply(subChunk, "ns1:value/@qualifiers",namespaces = chunkNS)) - - valueName <- paste(methodID,pCode,statCd,sep="_") - qualName <- paste(methodID,pCode,statCd,"cd",sep="_") - valueName <- paste("X",valueName,sep="") - qualName <- paste("X",qualName,sep="") + x <- lapply(attributeNames, function(x) xpathSApply(subChunk, paste0("ns1:value/@",x),namespaces = chunkNS)) + valueName <- paste(methodID,pCode,statCd,sep="_") + valueName <- paste("X",valueName,sep="") assign(valueName,value) - assign(qualName,qualifier) - if(length(get(qualName))!=0){ + df <- data.frame(agency = rep(agency,length(value)), + site_no = rep(site,length(value)), + stringsAsFactors=FALSE) + + for(k in 1:length(attributeNames)){ + df <- cbind(df, as.character(x[[k]]),stringsAsFactors=FALSE) + names(df)[length(df)] <- attributeNames[k] + } + + df <- cbind(df, get(valueName)) + names(df)[length(df)] <- valueName + + if("qualifiers" %in% names(df)){ + qualName <- paste(methodID,pCode,statCd,"cd",sep="_") + qualName <- paste("X",qualName,sep="") + names(df)[which(names(df) == "qualifiers")] <- qualName + } + + if("dateTime" %in% attributeNames){ if(asDateTime){ - df <- data.frame(rep(agency,length(datetime)), - rep(site,length(datetime)), - datetime, - tzAbbriev, - get(valueName), - get(qualName), - stringsAsFactors=FALSE) + datetime <- as.POSIXct(strptime(xpathSApply(subChunk, "ns1:value/@dateTime",namespaces = chunkNS),"%Y-%m-%dT%H:%M:%S"), tz="UTC") - names(df) <- c("agency_cd","site_no","datetime","tz_cd",valueName,qualName) - } else { - df <- data.frame(rep(agency,length(datetime)), - rep(site,length(datetime)), - datetime, - get(valueName), - get(qualName), - stringsAsFactors=FALSE) + tzHours <- as.numeric(substr(xpathSApply(subChunk, "ns1:value/@dateTime",namespaces = chunkNS), + 24, + nchar(xpathSApply(subChunk, "ns1:value/@dateTime",namespaces = chunkNS))-3)) + tzHoursOff <- substr(xpathSApply(subChunk, "ns1:value/@dateTime",namespaces = chunkNS), + 24, + nchar(xpathSApply(subChunk, "ns1:value/@dateTime",namespaces = chunkNS))) + tzAbbriev <- as.character(zoneAbbrievs[tzHoursOff]) + datetime <- datetime - tzHours*60*60 - names(df) <- c("agency_cd","site_no","datetime",valueName,qualName) - } - } else { - if(asDateTime){ - df <- data.frame(rep(agency,length(datetime)), - rep(site,length(datetime)), - datetime, - tzAbbriev, - get(valueName),stringsAsFactors=FALSE) + if(tz != ""){ + attr(datetime, "tzone") <- tz + } + df$tz_cd <- tzAbbriev - names(df) <- c("agency_cd","site_no","datetime","tz_cd",valueName) } else { - df <- data.frame(rep(agency,length(datetime)), - rep(site,length(datetime)), - datetime, - get(valueName),stringsAsFactors=FALSE) - - names(df) <- c("agency_cd","site_no","datetime",valueName) + datetime <- as.Date(strptime(xpathSApply(subChunk, "ns1:value/@dateTime",namespaces = chunkNS),"%Y-%m-%dT%H:%M:%S")) } + + df$dateTime <- datetime + } - + if (1 == i & valuesIndex[1] == j){ mergedDF <- df } else { -- GitLab