Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

Spread or gather a Tibble

I get a tibble from an API, API ANBIMA, that put the data in two columns, one with the name of the variables that i want to be the rows and other with the values. I was trying to put the first column in a list, filter for unique values, paste in a spread command, but i can’t do the first thing, that was create a list to begin with. When i tried, i’d get a chr list with one observation.

The data have 15 variables, that repeat itself in the first column, varying the values of the second column

EDIT:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

Like was suggested, here is the output of dput(head(x, 20)

dput(head(dados, 20))
structure(list(name = c("tipo_titulo", "expressao", "data_vencimento", 
"data_referencia", "codigo_selic", "data_base", "taxa_compra", 
"taxa_venda", "taxa_indicativa", "intervalo_min_d0", "intervalo_max_d0", 
"intervalo_min_d1", "intervalo_max_d1", "pu", "desvio_padrao", 
"tipo_titulo", "expressao", "data_vencimento", "data_referencia", 
"codigo_selic"), value = c("LTN", "Taxa (% a.a.)/252", "2023-01-01", 
"2022-12-06", "100000", "2016-01-20", "13.7107", "13.6952", "13.7027", 
"13.5377", "13.9248", "13.5338", "13.9233", "990.36449", "0.00259307377643", 
"NTN-F", "Taxa (% a.a.)/252", "2023-01-01", "2022-12-06", "950199"
)), row.names = c(NA, 20L), class = c("tbl_df", "tbl", "data.frame"
))

I’m at my desktop from work, so i can’t access a host to upload the data, i’ll put a picture that show the format of the tibble

enter image description here

The API info to access is in here: https://developers.anbima.com.br/en/visao-geral/autenticacao/#oauth2

To get the tibble, i used the code:

library(httr)
library(jsonlite)
library(tidyverse)
library(stringr)
library(tibble)
library(bizdays)

client_id <- ''
client_secret <- ''

token_anbima <- base64_enc(str_c(client_id, ':', client_secret))

resposta_anbima <- POST("https://api.anbima.com.br/oauth/access-token",
                        add_headers("Authorization" = str_c("Basic ", token_anbima)), 
                        body = list(grant_type = "client_credentials"),
                        encode = 'form'
                        )

resposta_anbima$status

access_token <- str_sub(content(resposta_anbima, "text"), start = 18, end = 29)

data_tpf <- preceding(Sys.Date(), 'Brazil/ANBIMA')

teste <- GET(str_c('https://api-sandbox.anbima.com.br/feed/precos-indices/v1/titulos-publicos/mercado-secundario-TPF?data=',
                   data_tpf),
             add_headers("client_id" = client_id,
                         "access_token" = access_token))

dados <- enframe(unlist(content(teste)))

>Solution :

Using pivot_wider in conjunction with unnest, though not entirely sure if this is what you need.

library(tidyr)

pivot_wider(dados, names_from=name, values_from=value, values_fn=list) %>% 
  unnest(everything())
# A tibble: 2 × 15
  tipo_titulo expressao  data_…¹ data_…² codig…³ data_…⁴ taxa_…⁵ taxa_…⁶ taxa_…⁷
  <chr>       <chr>      <chr>   <chr>   <chr>   <chr>   <chr>   <chr>   <chr>  
1 LTN         Taxa (% a… 2023-0… 2022-1… 100000  2016-0… 13.7107 13.6952 13.7027
2 NTN-F       Taxa (% a… 2023-0… 2022-1… 950199  2016-0… 13.7107 13.6952 13.7027
# … with 6 more variables: intervalo_min_d0 <chr>, intervalo_max_d0 <chr>,
#   intervalo_min_d1 <chr>, intervalo_max_d1 <chr>, pu <chr>,
#   desvio_padrao <chr>, and abbreviated variable names ¹​data_vencimento,
#   ²​data_referencia, ³​codigo_selic, ⁴​data_base, ⁵​taxa_compra, ⁶​taxa_venda,
#   ⁷​taxa_indicativa
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading