Sourcing Dataframes и цикл для создания списка / dataframe - PullRequest
2 голосов
/ 07 октября 2019

Я пытаюсь получить данные из API Comtrade (https://comtrade.un.org/data) с использованием R. У меня есть следующая функция для выбора источника данных по стране, которая работает нормально:

(list <- get.Comtrade(r="842", p="826", ps="201901", freq="M", fmt="csv", px = "HS", cc="All"))

R и pаргументы - это коды стран. Выходные данные из приведенной выше функции дают мне список. Данные, которые мне нужны из этого списка, могут быть найдены и сохранены в df следующим образом: df <- list[["data"]].

Однако мне нужно выполнить циклчерез аргумент p в функции выше (оставляя аргумент r фиксированным), чтобы получить данные для нескольких стран и сохранить их в одном файле.

Как я могу это сделать, не выполняя функцию страна за странойи затем извлекать данные один за другим?

так, например, скажем, мне нужны следующие p: p = c("826", "276"), затем для извлечения одной страны по отдельности я бы сделал list_1 <- get.Comtrade(r="842, p="826",ps="201901", freq="M", fmt="csv", px = "HS", cc="All"). Затем для доступа к данным исоздать df, я бы сделал df <- list_1[["data"]]. Наконец, я бы использовал rbind(), чтобы добавить df страны "826" и df страны "276".

Это то, что мне нужно для запуска впетлятак как у меня значительное количество р.

Заранее спасибо!

1 Ответ

1 голос
/ 07 октября 2019

Если мы хотим передать несколько p с, используйте lapply для циклического перебора

lapply(pvec, function(pv) get.Comtrade(r="842", p=pv, 
      ps="201901", freq="M", fmt="csv", px = "HS", cc="All")[["data"]])

Если мы получим те же имена столбцов, что и выходные данные, вывод list из get.Comtrade можетбыть связанными строкой с rbind

do.call(rbind, lapply(pvec, function(pv) get.Comtrade(r="842", p=pv, 
      ps="201901", freq="M", fmt="csv", px = "HS", cc="All")[["data"]]))

В tidyverse это можно сделать с помощью map

library(dplyr)
library(purrr)
map_dfr(pvec, ~ get.Comtrade(r = "842", p = .x,
             ps="201901", freq="M", fmt="csv", px = "HS",
          cc="All")[["data"]], .id = 'grp')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...