采购数据框并循环创建列表/数据框

时间:2019-10-07 16:39:29

标签: r api loops

我正在尝试使用R从Comtrade的API(https://comtrade.un.org/data)来获取数据。我具有以下功能,可以按国家/地区正常使用数据来源:

(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参数固定)以检索多个国家/地区的数据并将其保存在单个df中。

该如何执行而不必先逐个运行该国家/地区的功能,然后再逐个检索数据?

例如,假设我需要以下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()附加国家“ 826”的df和国家“ 276”的df。

这是我需要循环运行的原因,因为我有很多p。

谢谢!

1 个答案:

答案 0 :(得分:1)

如果我们要传递多个p,请使用lapply进行遍历

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

如果我们获得与输出相同的列名,则可以将list的{​​{1}}输出与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