Skip to content

Instantly share code, notes, and snippets.

@fernandobarbalho
Last active July 27, 2023 23:51
Show Gist options
  • Save fernandobarbalho/8f89eb4e7c777c800dafce01add56690 to your computer and use it in GitHub Desktop.
Save fernandobarbalho/8f89eb4e7c777c800dafce01add56690 to your computer and use it in GitHub Desktop.
Calcula valores econômicos para uma data considerando conversão de moedas
calcula_valor_constante <- function(df_dados_hist, data_constante ){
#Argumentos
#df_dados_hist: dataframe em que as duas primeiras colunas são formadas por uma data (Y-m-d) e um valor
#data_constante: data para gerar valor constante. Formato da data: Y-m-d
#Por enquanto as datas estão limitadas à da série temporal baixada do IPCA Total do portal de dados abertos do BACEN
#Essa série começa em 1992-01-01
library(dplyr)
library(lubridate)
library(httr)
library(jsonlite)
names(df_dados_hist)[1:2]<- c("data","valor")
###faz a conversão para real
df_dados_hist<-
df_dados_hist %>%
mutate(valor= case_when(
data>= ymd("1992-01-01") & data<= ymd("1993/07/31") ~ valor/(1000^2*2.75),
data>= ymd("1993-08-01") & data<= ymd("1994/06/30") ~ valor/(1000*2.75),
TRUE ~ valor
))
#################Cálculos econômicos
#Dados do IPCA com a série temporal
url<- "https://api.bcb.gov.br/dados/serie/bcdata.sgs.4449/dados?formato=json"
resposta <- GET(url)
IPCA_historico <- content(resposta, "text")
IPCA_historico <- fromJSON(IPCA_historico, flatten = TRUE)
IPCA_historico$valor <- as.numeric(IPCA_historico$valor)
# IPCA_historico <- read_delim("bcdata.sgs.4449.csv",
# ";", escape_double = FALSE, locale = locale(decimal_mark = ",",
# grouping_mark = "."), trim_ws = TRUE)
IPCA_historico<-
IPCA_historico %>%
filter(data<= ymd(data_constante))
#################Cálculos econômicos
#Calcula o número índice para todos os meses da série temporal
num_index<-
map_dbl(1:NROW(IPCA_historico), function(a_i){
prod(1+IPCA_historico$valor[1:a_i]/100)
})
IPCA_historico$num_indice <- num_index
num_indice_constante<-
(IPCA_historico%>%
filter(dmy(data)== ymd(data_constante)))$num_indice
#################Cálculos econômicos
#Acrescenta a coluna do número índice
IPCA_historico$num_indice <- num_index
IPCA_historico_trab<-
IPCA_historico %>%
mutate(data= dmy(data)) %>%
filter(data %in% df_dados_hist$data) %>%
select(data,num_indice)
df_dados_hist %>%
inner_join(IPCA_historico_trab) %>%
mutate(valor = valor * (num_indice_constante/num_indice)) %>%
select(data, valor)
}
#Exemplo de uso
df_dados_hist<-
tibble(data=as.Date("1994-07-01"), valor =400) %>%
bind_rows(tibble(data=as.Date("1993-07-01"), valor =19800))
df_valores_constantes<- calcula_valor_constante(df_dados_hist, "2020-05-01" )
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment