我正在尝试使用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。
谢谢!
答案 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