【发布时间】:2021-12-15 21:41:30
【问题描述】:
我需要计算各种商品的报告数量之间的“价值差距”。例如(下表),美国报告说他们向中国出口了 4 个苹果。中国报告说他们进口了 4 个(苹果缺口为 0)。美国从中国进口了 5 个橙子,中国报告说仅出口了 4 个(1 个橙子缺口)。真正的问题有 7 个国家、10 种商品等。
#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
目标是计算差异并追加到新表中:
Value.Gap
Reporter Partner Commodity Gap
1 China USA apple 0
2 USA China orange 1
我想出了一个非常笨重且速度慢的方法,它可以从循环中受益。
#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
【问题讨论】:
标签: r dataframe difference array-difference