如何在oec库中为getdata函数编写嵌套的for循环?

时间:2019-02-01 08:56:56

标签: r for-loop

对于功能getdata(origin, destination, year, classification)
如果运行getdata("tha", "sgp", 2015, "hs07"),我们将仅获得泰国和新加坡之间的双边贸易。

但是我需要东盟国家的所有双边贸易。反正有这样做吗?我尝试自己编写嵌套的for循环,但是没有用。

我是r编程的新手。我使用的代码是:

origins <- c("tha", "vnm", "mys", "idn")
destinations <- c("vnm","sgp")
for (origin in origins ) {
  for (destination in destinations) {
    getdata(origins, destinations, 2015, "hs07")
  }
}

1 个答案:

答案 0 :(得分:0)

您使用的输入存在一些问题:

  • 1)某些数据不可用,从而引发以下错误:
      

    stop("No data available. Try changing year or trade classification.")。   它专门针对vnm发生,并且将停止getdata搜索;

  • 2)运行getdata时,如果要重复,则必须重新启动R会话,但我不知道为什么。

因此,这是一种仅使用sgp数据的方法(为了更改代码,我使用vnm更改了顺序)。

library(tidyverse)
library(oec)

origins <- c("tha", "vnm", "mys", "idn")
destinations <- c("sgp","vnm")



res <- lapply(origins, function(x){

  lapply(destinations[1], function(y) {
  out1 <- getdata(x, y, 2015, "hs07")
  out2 <- getdata(y, x, 2015, "hs07")
  })
})

这将产生一个包含data.frame的列表,您所需要做的就是使用map_df中的purrr将它们绑定到一个列表中。

restult <- map_df(res, bind_rows)

给出:

## A tibble: 20,049 x 31
#    year origin_id destination_id origin_name destination_name id   
#   <dbl> <chr>     <chr>          <chr>       <chr>            <chr>
# 1  2015 sgp       tha            Singapore   Thailand         0102 
# 2  2015 sgp       tha            Singapore   Thailand         0102~
# 3  2015 sgp       tha            Singapore   Thailand         0106 
# 4  2015 sgp       tha            Singapore   Thailand         0106~
# 5  2015 sgp       tha            Singapore   Thailand         0106~
# 6  2015 sgp       tha            Singapore   Thailand         0106~
# 7  2015 sgp       tha            Singapore   Thailand         0106~
# 8  2015 sgp       tha            Singapore   Thailand         0202 
# 9  2015 sgp       tha            Singapore   Thailand         0202~
#10  2015 sgp       tha            Singapore   Thailand         0202~
## ... with 20,039 more rows, and 25 more variables: id_len <int>,
##   product_name <chr>, group_id <chr>, group_name <chr>,
##   export_val <dbl>, export_val_growth_pct_5 <dbl>,
##   export_val_growth_val_5 <dbl>, export_val_growth_pct <dbl>,
##   export_val_growth_val <dbl>, export_rca <dbl>, import_val <dbl>,
##   import_val_growth_pct <dbl>, import_val_growth_pct_5 <dbl>,
##   import_val_growth_val <dbl>, import_val_growth_val_5 <dbl>,
##   import_rca <dbl>, trade_exchange_val <dbl>, pci <dbl>,
##   pci_rank <dbl>, pci_rank_delta <dbl>, top_exporter_code <chr>,
##   top_importer_code <chr>, top_importer <chr>, top_exporter <chr>,
##   color <chr>