我在使用R从数据库中提取数据时遇到了麻烦。手册中提供的代码仅部分起作用。它检索了157个可用站点中的5个。
我的同事提供了一个循环功能来检索数据。我想要一种可能适用于R的应用家族的替代解决方案。
不幸的是,很难完全复制该问题。希望有人能理解循环功能并能够提出替代方案
library(Hilltop)
library(zoo)
dfile <- HilltopData("M:/E_Science/IT/Tideda/HilltopArchive/MonitorWells.hts")
在此步骤中,我将创建一个特征矢量,其特征是距地面的深度为测量类型。这提供了包含157个位点的字符向量。
sites <- c(unlist(MeasurementList(dfile,"") %>%
filter(Measurement=="Depth From Land Surface [Manual Water Level]") %>%
select(Site)))
要查询数据库,我运行此代码,它提供5个站点的数据列表。但是我希望是157。
retrieve <- GetData(dfile,
sites,
measurement = "Depth From Land Surface[Manual Water Level]",
startTime = "",
endTime = "",
method = "",
interval = "")
此循环功能从所有站点检索数据。
measurements_LS2 <- measurements1 %>%
filter(Measurement=="Depth From Land Surface [Manual Water Level]") %>%
select(Site,Measurement)
length <- length(measurements_LS2$Site)
allData <- NULL
length <- length(measurements_LS2$Site)
allData <- NULL
for(sm in 1:length) {
tempdata <- NULL
zoodata <- NULL
site <- measurements_LS2$Site[sm]
meas <- measurements_LS2$Measurement[sm]
zoodata <- tryCatch({GetData(dfile,
site,
meas,
"",
"",
method="",
interval="")}, error = function(err) {
message(paste(site, meas, err))
})
if(!is.null(zoodata)) {
tempdata <- fortify.zoo(zoodata)
tempdata$Site <- site
tempdata$Measurement <- meas
}
if(is.null(allData)) {
allData <- tempdata
} else {
allData <- if(!is.null(tempdata)) {rbind(allData, tempdata)}
}
}
有人能建议一些可能适用的功能吗?循环看起来非常复杂。
谢谢