首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通货膨胀率与CPI倍数国家/地区,与R

通货膨胀率与CPI倍数国家/地区,与R
EN

Stack Overflow用户
提问于 2020-11-16 13:37:33
回答 2查看 262关注 0票数 1

我必须计算从2015年到2019年的通货膨胀率。我必须用CPI来做这件事,这是我在四年中每个月的数据。这意味着我必须计算去年同月的增长率百分比。

他们问我几个国家的计算结果,然后计算或显示2015-2019年期间的平均值。

这是我的数据库:

代码语言:javascript
复制
 data <- read.table("https://pastebin.com/raw/6cetukKb")

我已经尝试了quantmod,dplyr,lubridate包,但我不能做CPI转换。

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

代码语言:javascript
复制
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]

**

更新

**

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

代码语言:javascript
复制
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     |

其中"value“对应于每个国家在整个2015-2019年期间的平均通货膨胀

EN

回答 2

Stack Overflow用户

发布于 2020-11-17 04:00:49

我们可以使用data.table方法

代码语言:javascript
复制
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
# ..
票数 1
EN

Stack Overflow用户

发布于 2020-11-16 14:59:43

您应该使用header = TRUE读取数据,因为第一行是列的名称。然后获取长格式的数据,这使得计算变得很容易。

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

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64853142

复制
相关文章

相似问题

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