R - сценарий цикла, который извлекает данные из онлайн-базы данных и имеет уникальное имя для каждой итерации

Я новичок в R и изо всех сил пытался упростить код с помощью цикла for. Я пытаюсь получить данные о качестве воды из онлайн-базы данных, используя пакет dataRetrieval. В настоящее время я продублировал код для каждого сайта и изменил номер сайта и выходное имя, но пытался упростить это, помещая скрипт в цикл for, и у меня возникли проблемы с созданием отдельных таблиц данных с уникальными идентификаторами.

Исходный код, который создает таблицу данных для каждого сайта. Единственные переменные, которые изменяются, — это siteNumbers и имя таблицы данных «x»_dataTable.

#BW00A
siteNumbers = c("383652091125002")
parameterCode = c("00010","00095", "00300", "00400", "34475", "34485", "45617")
startDate = "1900-01-01"
endDate = "2020-12-01"

BW00A_dataTable <- readNWISqw(siteNumbers, parameterCode,
                             startDate, endDate)
#BW01
siteNumbers = c("383648091124501")
parameterCode = c("00010","00095", "00300", "00400", "34475", "34485", "45617")
startDate = "1900-01-01"
endDate = "2020-12-01"

BW01_dataTable <- readNWISqw(siteNumbers, parameterCode,
                             startDate, endDate)
#BW01A
siteNumbers = c("383648091124502")
parameterCode = c("00010","00095", "00300", "00400", "34475", "34485", "45617")
startDate = "1900-01-01"
endDate = "2020-12-01"

BW01A_dataTable <- readNWISqw(siteNumbers, parameterCode,
                             startDate, endDate)

Новый код Я не могу приступить к работе. Я поместил siteNumbers и siteNames во фрейм данных. Я хочу, чтобы скрипт внутри цикла for перебирал siteNumbers, извлекал данные, а затем приписывал вновь созданную таблицу данных соответствующему siteNames, также известному как unique_siteName. Я не уверен, что это вообще возможно.

df <- data.frame(
  siteNumbers = c("383652091125001",    "383652091125002",  "383648091124501",  "383648091124502",  "383506091132201",  "383508091132002",  "383508091132004",  "383519091133701",  "383544091132601",  "383544091132502",  "383628091124801",  "383639091125902",  "383639091125901",  "383638091125001",  "383638091125002",  "383631091124803",  "383631091124804",  "383631091124801",  "383631091124802",  "383636091123801",  "383636091123811",  "383616091125701",  "383640091130701",  "383640091130702",  "383621091130701",  "383621091130703",  "383621091130702",  "383624091130501",  "383624091130502",  "383616091130801",  "383616091130802",  "383644091131601",  "383627091130201",  "383622091130604",  "383622091130605",  "383557091132001",  "383614091132801"),
  siteName = c("BW-00", "BW-00A",   "BW-01",    "BW-01A",   "MW-04",    "MW-04A",   "MW-04B",   "MW-11",    "BW-21",    "BW-21A",   "210TB-C6", "Bates Spring", "Bates Spring below dam",   "BW-02",    "BW-02A",   "BW-04A-D", "BW-04A-S", "BW-04D",   "BW-04S",   "BW-05",    "BW-05A",   "BW-07",    "BW-08",    "BW-08A",   "BW-11",    "BW-11A-D", "BW-11A-S", "BW-13",    "BW-13A",   "BW-14",    "BW-14A",   "BW4-15",   "BW4-16",   "BW4-17",   "BW4-18",   "W3",   "W4")
)

parameterCode = c("00010","00095", "00300", "00400", "34475", "34485", "45617")
startDate = "1900-01-01"
endDate = "2020-12-01"

for (row in df)
{
 unique_siteName <- readNWISqw(siteNumbers, parameterCode,
                             startDate, endDate)  
  
}

Спасибо за вашу помощь!

В R обычно рекомендуется сохранять связанные объекты, такие как фреймы данных, в списке. Вы можете присваивать имена каждому объекту списка и/или ссылаться на объект списка по его числовому индексу. Например, mylist[[3]] относится к 3-му объекту в списке mylist. Обработка всех связанных объектов в списке также упрощается с помощью функции lapply.

SteveM 09.12.2020 17:29
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно перебрать индекс строки и сослаться на фрейм данных с номером строки в цикле и создать list для накопления результатов:

results <- list()
for (row in 1:nrow(df)) {
 results[[i]] <- readNWISqw(df$siteNumbers[i], parameterCode,
                             startDate, endDate)  
}
names(results) <- df$siteName

R также предлагает lapply как способ упростить этот распространенный шаблон. Приведенный выше цикл эквивалентен этому:

results <- lapply(df$siteNumbers, FUN = readNWISqs, parameterCode, startDate, endDate)
names(results) <- df$siteName

Я бы посоветовал прочитать мой ответ на Как составить список фреймов данных? для дальнейшего обсуждения и объяснения, как того, почему мы делаем это таким образом, так и того, какие следующие шаги будут хорошими (например, объединение списка results в один фрейм данных).

Другие вопросы по теме