R帮助!计算每个子组的比例

问题描述

我有以下数据集,称为 GrossExp3 ,涵盖了15个报告国从1998年至2018年的所有年度的双边出口额(以1000美元为单位)可用的合作伙伴国家 它涵盖以下四个变量: 年,ReporterName(=出口商),PartnerName(=出口目的地),“ TradeValue in 1000 USD”(=出口到目的地的价值) PartnerName列还包含一个名为“所有”的条目,该条目是报告者每年所有出口的总和。

这是我的数据头

> head(GrossExp3,n = 20)
    Year ReporterName          PartnerName TradeValue in 1000 USD
 1: 2018       Angola          Afghanistan                 19.353
 2: 2018       Angola              Albania                  2.380
 3: 2018       Angola              Andorra                  0.326
 4: 2018       Angola United arab Emirates             884725.078
 5: 2018       Angola            Argentina                 61.362
 6: 2018       Angola              Armenia                 60.105
 7: 2018       Angola       American Samoa                 12.007
 8: 2018       Angola  Antigua and Barbuda                422.006
 9: 2018       Angola            Australia              40220.092
10: 2018       Angola              Austria                433.699

这是我的数据摘要

> summary(GrossExp3)
      Year      ReporterName       PartnerName        TradeValue in 1000 USD
 Min.   :1998   Length:37398       Length:37398       Min.   :       0      
 1st Qu.:2004   Class :character   Class :character   1st Qu.:      39      
 Median :2009   Mode  :character   Mode  :character   Median :     596      
 Mean   :2009                                         Mean   :  135605      
 3rd Qu.:2014                                         3rd Qu.:   10209      
 Max.   :2019                                         Max.   :47471515 

我的目标是按照每年出口总额的百分比(所有百分比得分都超过1%)过滤每个国家/地区最重要的出口目的地,并跟踪其随着时间的变化。 我特别想

  1. 添加一个称为“百分比”的附加列,其中包含按年计的出口总额百分比(按年计的“ 1000美元的贸易价值”中所有条目的总和)
  2. 删除所有百分比
  3. 按年份汇总每个ReporterName的数据
  4. 通过降低百分比值进行排列

我尝试过的事情 到目前为止,我尝试通过首先过滤一个ReporterName和一年的方法来进行尝试

ONE_country <- GrossExp3 %>%
  group_by(Year,ReporterName) %>%
  filter(ReporterName == "Botswana",PartnerName != "All",Year == 2018) %>%
  arrange(desc(`TradeValue in 1000 USD`)) %>%
  summarize(Year,ReporterName,PartnerName,Percent = `TradeValue in 1000 USD`/sum(`TradeValue in 1000 USD`)*100)
head(ONE_country,n = 10)

我不确定在这里得到的结果是否正确。 此外,我希望所有国家和地区的信息保留在同一数据集中。 另外,我没有设法将所有百分比> 1 丢弃,并且希望该百分比在逗号后不输入任何内容

一个问题是,如果我没有在函数中写它们,为什么总结函数不返回所有列?

由于我在周末一直被这些问题困扰,我将非常感谢您提供有关如何解决该问题的建议! 祝一切顺利, 我喜欢

解决方法

没有可复制的数据,这很难回答,但这可能会有所帮助:

GrossExp3 %>%
  group_by(Year,ReporterName) %>%
  add_tally(wt = `TradeValue in 1000 USD`,name = "TotalValue") %>%
  mutate(Percentage = 100 * (`TradeValue in 1000 USD` / TotalValue)) %>%
  filter(Percentage >= 1) %>%
  arrange(ReporterName,Year,desc(Percentage))

我们使用add_tally()来按国家/地区计算每年的贸易总额,然后使用mutate()来计算每一行的贸易总额百分比。然后,我们可以排除百分比

根据您上面提供的非常有限的代码段,将返回以下内容:

# A tibble: 2 x 6
# Groups:   Year,ReporterName [1]
   Year ReporterName PartnerName          `TradeValue in 1000 USD` TotalValue Percentage
  <dbl> <chr>        <chr>                                   <dbl>      <dbl>      <dbl>
1  2018 Angola       United Arab Emirates                  884725.    925956.      95.5 
2  2018 Angola       Australia                              40220.    925956.       4.34

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...