【问题标题】:Inflation rate with the CPI multiples country, with R通货膨胀率与 CPI 乘数国家,与 R
【发布时间】:2020-11-16 05:37:32
【问题描述】:

我必须计算 2015 年到 2019 年的通货膨胀率。我必须使用 CPI 来计算,这 4 年中每个月都有。这意味着我必须计算去年同月的百分比增长率。​​p>

他们要求我计算几个国家的数据,然后计算或显示 2015-2019 年期间的平均值。

这是我的数据库:

 data <- read.table("https://pastebin.com/raw/6cetukKb")

我尝试过 quantmod、dplyr、lubridate 包,但无法进行 CPI 转换。

我试过了,但我知道它不正确:

data$year <- year(data$date)
anual_cpi <- data %>%    group_by(year) %>% summarize(cpi = mean(Argentina))
  anual_cpi$adj_factor <- anual_cpi$cpi/anual_cpi$cpi[anual_cpi$year == 2014]

**

更新

**

我的老师给了我们关于如何得到结果的提示,但是当我尝试将它添加到代码中时,我得到了一个错误。

data %>%
  tidyr::pivot_longer(cols = Antigua_Barbuda:Barbados) %>%
  group_by(name, year) %>%
  summarise(value = mean(value)) %>%
  mutate((change=(x-lag(x,1))/lag(x,1)*100))



| Antigua_Barbuda   | -1.55     |
|-----------------  |-------    |
| Argentina         | 1.03      |
| Aruba             | -1.52     |
| Bahamas           | -1.56     |
| Barbados          | -1.38     |

其中“价值”对应于 2015-2019 年整个期间每个国家/地区的平均通货膨胀率

【问题讨论】:

    标签: r database dplyr lubridate quantmod


    【解决方案1】:

    我们可以使用data.table 方法

    library(data.table)
    melt(fread("https://pastebin.com/raw/6cetukKb"), 
        id.var = c('date', 'year', 'period', 'periodName'))[, 
        .(value = mean(value)), .(variable, year)][,
          adj_factor := value/value[year == 2014]][]
    #           variable year     value adj_factor
    # 1: Antigua_Barbuda 2014  96.40000  1.0000000
    # 2: Antigua_Barbuda 2015  96.55833  1.7059776
    # 3: Antigua_Barbuda 2016  96.08333  1.0146075
    # 4: Antigua_Barbuda 2017  98.40833  0.9900235
    # 5: Antigua_Barbuda 2018  99.62500  0.5822618
    # 6: Antigua_Barbuda 2019 101.07500  1.0484959
    # 7:       Argentina 2014  56.60000  1.0000000
    # ..
    

    【讨论】:

    • 谢谢@akrun!!
    【解决方案2】:

    您应该使用header = TRUE 读取您的数据,因为第一行是列的名称。然后以长格式获取您的数据,以便轻松进行计算。

    在此之后,您可以执行任何您想要的计算。例如,要执行与您的尝试相同的步骤,即将每个国家/地区的所有值除以 2014 年的值。

    library(dplyr)
    
    data <- read.table("https://pastebin.com/raw/6cetukKb", header = TRUE)
    
    data %>%
      tidyr::pivot_longer(cols = Antigua_Barbuda:Barbados) %>%
      group_by(name, year) %>%
      summarise(value = mean(value)) %>%
      mutate(adj_factor = value/value[year == 2014])
    
    #  name             year value adj_factor
    #   <chr>           <int> <dbl>      <dbl>
    # 1 Antigua_Barbuda  2014  96.4      1    
    # 2 Antigua_Barbuda  2015  96.6      1.00 
    # 3 Antigua_Barbuda  2016  96.1      0.997
    # 4 Antigua_Barbuda  2017  98.4      1.02 
    # 5 Antigua_Barbuda  2018  99.6      1.03 
    # 6 Antigua_Barbuda  2019 101.       1.05 
    # 7 Argentina        2014  56.6      1    
    # 8 Argentina        2015  64.0      1.13 
    # 9 Argentina        2016  89.9      1.59 
    #10 Argentina        2017 113.       2.00 
    # … with 20 more rows
    

    【讨论】:

      猜你喜欢
      • 2020-04-27
      • 1970-01-01
      • 2023-02-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-08
      • 1970-01-01
      相关资源
      最近更新 更多