У меня проблемы с циклом просмотра списка фреймов данных.Я приложу свой полный код ниже с отредактированными путями к файлам, а затем объясню особенности.
# load packages ----
xlib <- c("rnoaa","devtools","dplyr","plyr","hydroTSM","chron","gdata","date", "rowr")
lapply(xlib, require, character.only = T)
rm(xlib)
# se token ----
# get this from NOAA site - https://www.ncdc.noaa.gov/cdo-web/token
options(noaakey = "QlzFUrMWVrLFKkZijFohYRmbtVvEaqUB")
# set working folder ----
setwd("filepathway")
# read weather station information
statns <- read.csv(file = "filepathway/weather_station_locations_v1.csv", header = T)
# define dates ----
st.date <- as.Date("1950-01-01")
end.date <- as.Date("2018-04-30")
date1 <- data.frame(date = dip(st.date, end.date))
date1$year <- as.numeric(format(date1$date, "%Y"))
date1$month <- as.numeric(format(date1$date, "%m"))
date1$day <- as.numeric(format(date1$date, "%d"))
date1$jday <- as.numeric(format(date1$date, "%j"))
n1 <- 1
#n1 <- 100
for(id1 in (1:n1)) {
# pull data from NOAA server ----
# 1. precip
prcp.pull <- meteo_pull_monitors(monitors = statns$STATION[ id1 ],
keep_flags = T,
date_min = st.date,
date_max = end.date,
var = "PRCP")
prcp.pull$prcp <- prcp.pull$prcp / 10 # convert to mm/day
# 2. max. temperature
tmax.pull <- meteo_pull_monitors(monitors = statns$STATION[ id1 ],
keep_flags = T,
date_min = st.date,
date_max = end.date,
var = "TMAX")
tmax.pull$tmax <- tmax.pull$tmax / 10 # convert to dec. C
#3. min. temperature
tmin.pull <- meteo_pull_monitors(monitors = statns$STATION[ id1 ],
keep_flags = T,
date_min = st.date,
date_max = end.date,
var = "TMIN")
tmin.pull$tmin <- tmin.pull$tmin / 10 # convert to dec. C
statns2 <- split(statns, statns$"STATION")
colnames(prcp.pull)[1] <- "STATION"
colnames(tmin.pull)[1] <- "STATION"
colnames(tmax.pull)[1] <- "STATION"
prcpA <- rbind.fill(statns2, prcp.pull)
tminA <- rbind.fill(statns2, tmin.pull)
tmaxA <- rbind.fill(statns2, tmax.pull)
prcpB <- cbind.fill(statns2, prcpA)
tminB <- cbind.fill(statns2, tminA)
tmaxB <- cbind.fill(statns2, tmaxA)
tminC <- merge(tminB, statns2, by.x = 2, by.y = 2)
tmaxC <- merge(tmaxB, statns2, by.x = 2, by.y = 2)
prcpC <- merge(prcpB, statns2, by.x = 2, by.y = 2)
colnames(tminC)[2] <- "A"
colnames(tminC)[3] <- "B"
colnames(tminC)[4] <- "C"
colnames(tminC)[5] <- "D"
colnames(tminC)[6] <- "E"
colnames(tminC)[7] <- "G"
tminD = subset(tminC, select = -c(A, B, C, D, E, G ))
colnames(tmaxC)[2] <- "A"
colnames(tmaxC)[3] <- "B"
colnames(tmaxC)[4] <- "C"
colnames(tmaxC)[5] <- "D"
colnames(tmaxC)[6] <- "E"
colnames(tmaxC)[7] <- "G"
tmaxD = subset(tmaxC, select = -c(A, B, C, D, E, G ))
colnames(prcpC)[2] <- "A"
colnames(prcpC)[3] <- "B"
colnames(prcpC)[4] <- "C"
colnames(prcpC)[5] <- "D"
colnames(prcpC)[6] <- "E"
colnames(prcpC)[7] <- "G"
prcpD = subset(prcpC, select = -c(A, B, C, D, E, G ))
# save output as text file
fout <- paste("filepathway", c("prcpD", "tmaxD", "tminD"), statns$STATION[ id1 ],
".csv", sep = "")
# 1. precip
if (nrow(prcpD) > 0) {
write.table(file = fout[1], x = prcpD, col.names = T, row.names = T, append = F, sep = ",", quote = F)
}
# 2. tmax
if (nrow(tmaxD) > 0) {
write.table(file = fout[2], x = tmaxD, col.names = T, row.names = T, append = F, sep = ",", quote = F)
}
# 3. tmin
if (nrow(tminD) > 0) {
write.table(file = fout[3], x = tminD, col.names = T, row.names = T, append = F, sep = ",", quote = F)
}
}
}
После этой строки: statns2 <- split (statns, statns $ "STATION") Я получаю список данныхкадры и хотели бы выполнить цикл через каждый из этих отдельных кадров данных - как, например, когда id1 (число от 1 до 13926) соответствует FID + 1 (FID начинается с 0 и идет до конца списка), так чтоКоманды после разделения просматриваются по списку по одному, проверяя соответствие информации между моими осадками, данными о температуре и метеостанцией </p>
Без разделения на список фреймов данных просто выдаются каждомуметеостанция - один ряд данных, тогда как я хотел бы, чтобы строка идентифицировала станцию, затем по одной на каждую дату от начала до конца.
обновление: я сделал небольшое подмножество своего списка и использовал заголовок (statns.small)и вставил мои результаты ниже
$`CA003030525`
FID STATION LAT LON ELEV NAME CODE
1 0 CA003030525 49.8 -112.3 824 AB BARNWELL AGDM 71346
$CA003030720
FID STATION LAT LON ELEV NAME CODE
2 1 CA003030720 49.5667 -113.05 980 AB BLOOD TRIBE AGDM 71517
$CA003030768
FID STATION LAT LON ELEV NAME CODE
3 2 CA003030768 49.7333 -111.45 817 AB BOW ISLAND 71231