首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在R中迭代函数?

如何在R中迭代函数?
EN

Stack Overflow用户
提问于 2022-09-28 06:47:33
回答 1查看 52关注 0票数 0

我是一个初学者R试图做一些分析联合国商品贸易数据使用'comtradr‘包。

作为背景,一揽子方案要求从商品贸易委员会数据库获得数据(例如中国1992-2021年的鱼出口)。

我知道我想做什么,但我正在努力想办法去做。

在简单的语言中,对于列表中的国家(country_list如下所示),我希望提取导入数据,然后使用ct_search函数提取导出数据。

然后,我希望选择相关栏,并在两个单独的线图图中绘制每个国家的进出口图。

country_list <- list("China", "United States", "India") --这应该填补了ct_search函数中的记者字段。

trade_list <- list("exports", "imports") --这将填充ct_search函数中的trade_direction字段。

我可以为一个国家这样做,如下所示,并可以复制粘贴每个国家的代码,但我知道这是没有效率的。

我猜这是一个函数+循环的混合,但我不知道如何在R .有人能举个例子吗?直截了当吗?因此,理想情况下,产量将是六块土地--中国、美国和印度的进口和出口地块。

任何帮助都非常感谢!

代码语言:javascript
复制
--

library(tidyverse)
library(comtradr)

df <- ct_search(
  reporters = "China", 
  partners = "World",
  trade_direction = "exports",
  freq = "annual",
    commod_codes = "030520",
  type = "goods"
)

df2 <- df %>%
  select(year, qty, trade_value_usd)

ggplot(data = df2, aes(x = year, y = qty)) +
  geom_line(size = 1) +
  geom_point(size = 2) +
  theme_bw()
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-09-28 07:21:12

  1. ct_search允许传递字符向量(!!)的情况下,不必遍历国家和贸易方向来获取数据,即使用c而不是list。注意,例如,对于"United States",您必须使用"USA"
  2. 要为每个国家创建您的地块,您可以按国家split您的数据,将您的绘图代码放在一个函数中,并使用例如purrr::imap来循环处理国家数据列表。使用imap可以方便地将国家名称作为第二个参数传递给绘图函数,我将其添加为绘图标题。我使用facet_wrap来创建每个国家的进出口图,而不是单独的进出口地块。
代码语言:javascript
复制
library(tidyverse)
library(comtradr)

country_list <- c("China", "United States" = "USA", "India")
trade_list <- c("exports", "imports")

df <- ct_search(
  reporters = country_list, 
  partners = "World",
  trade_direction = trade_list,
  freq = "annual",
  commod_codes = "030520",
  type = "goods"
)

df2 <- df %>%
  select(year, qty, trade_value_usd, reporter, trade_flow)

plot_fun <- function(.data, cntry) {
  ggplot(data = .data, aes(x = year, y = qty)) +
    geom_line(size = 1) +
    geom_point(size = 2) +
    facet_wrap(~trade_flow) +
    theme_bw() +
    labs(title = cntry)
}

df2 %>%
  split(.$reporter) %>%
  purrr::imap(plot_fun)
#> $China

代码语言:javascript
复制
#> 
#> $India

代码语言:javascript
复制
#> 
#> $USA

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73877243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档