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:
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
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)))
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