首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算报告导入器/导出器之间的价值差距[R}

计算报告导入器/导出器之间的价值差距[R}
EN

Stack Overflow用户
提问于 2021-11-01 02:49:30
回答 1查看 15关注 0票数 0

我需要计算各种商品的报告量之间的“价值差距”。例如(下表),美国报告说他们向中国出口了4个苹果。中国报告说他们进口了4个(0个苹果差距)。美国从中国进口了5个橙子,中国只出口了4个(1个橙子缺口)。真正的问题有7个国家,10个国家等。

代码语言:javascript
复制
#example data 
Trade.Data <- data.frame(
     Reporter = c("USA","China","USA", "China"), 
     Partner =  c("China","USA","China", "USA"),
     Flow = c("Export", "Import", "Import", "Export"), 
     Commodity = c("apple", "apple","orange", "orange"),
     Volume = c(4,4,5,4)
 )
 
 Trade.Data
  Reporter Partner   Flow Commodity Volume
1      USA   China Export     apple      4
2    China     USA Import     apple      4
3      USA   China Import    orange      5
4    China     USA Export    orange      4

目标是计算差值并附加到一个新表中:

代码语言:javascript
复制
Value.Gap
Reporter    Partner  Commodity    Gap
1    China     USA      apple      0
2      USA   China     orange      1

我想出了一个非常笨拙和缓慢的方法,可以从循环中受益。

代码语言:javascript
复制
#SO CLUNKY
fvalue <- function(dataframe, ReporterCountry, TradeFlow, PartnerCountry, Commodity){
  x <- dataframe %>% filter(
    Reporter == ReporterCountry,
    Flow == TradeFlow,
    Partner == PartnerCountry,
    Commodity == Commodity)
  print (x$Volume)
  
}

USA_import_China_apple <-fvalue(Trade.Data, "USA", "Import", "China", "apple")
China_export_USA_apple <- fvalue(Trade.Data, "China", "Export", "USA", "apple")
gap_USA_China_apple <- USA_import_China_apple - China_export_USA_apple
gap_USA_China_apple

 USA_import_China_apple <-fvalue(Trade.Data, "USA", "Import", "China", "apple")
[1] 5
> China_export_USA_apple <- fvalue(Trade.Data, "China", "Export", "USA", "apple")
[1] 4
> gap_USA_China_apple <- USA_import_China_apple - China_export_USA_apple
> gap_USA_China_apple
[1] 1
EN

回答 1

Stack Overflow用户

发布于 2021-11-01 04:23:11

我又添加了两行来澄清,请让我知道这是错误的。

代码语言:javascript
复制
Trade.Data <- data.frame(
  Reporter = c("USA","China","USA", "China", "USA", "UK"), 
  Partner =  c("China","USA","China", "USA", "UK", "USA"),
  Flow = c("Export", "Import", "Import", "Export", "Import", "Export"), 
  Commodity = c("apple", "apple","orange", "orange", "apple", "apple"),
  Volume = c(4,4,5,4, 3, 5)
)

  Reporter Partner   Flow Commodity Volume
1      USA   China Export     apple      4
2    China     USA Import     apple      4
3      USA   China Import    orange      5
4    China     USA Export    orange      4
5      USA      UK Import     apple      3
6       UK     USA Export     apple      5

使用stringr::str_splitlibrary(dplyr)

代码语言:javascript
复制
library(stringr)
library(dplyr)

Trade.Data %>%
  mutate(key = ifelse(
    Flow == "Import",
    paste0(Reporter, "-",Partner),
    paste0(Partner, "-",Reporter)
  )) %>%
  group_by(Commodity, key) %>%
  summarize(Gap = abs(diff(Volume))) %>%
  rowwise %>%
  mutate(Reporter = str_split(key, "-", simplify = T)[1],
         Partner = str_split(key, "-", simplify = T)[2]) %>%
  select(-key)

  Commodity   Gap Reporter Partner
  <chr>     <dbl> <chr>    <chr>  
1 apple         0 China    USA    
2 apple         2 USA      UK     
3 orange        1 USA      China 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69792173

复制
相关文章

相似问题

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