多层列表格式

问题描述 投票:0回答:1

我正在执行响应 API 拉取并获取损益表的多层列表。我正在尝试将数据格式化为数据框,其中损益表行成为列,会计期间成为行。当我执行下面的代码时,我几乎得到了我想要的,但包含句点的第一列实际上不是一列。通过一些操作,我认为我可以得到我想要的结果,但希望有人可以对我的问题有一个更优雅的解决方案。

library('httr')
library('tidyr')

 url4 <- "https://api.nasdaq.com/api/company/NKE/financials?frequency=1"
  
  response_fin_ann <- GET(url4, add_headers(`User-Agent`= "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/119.0"
                                           ,`Accept-Language`= "en-US,en;q=0.5")) 

api_con_fin_ann <- content(response_fin_ann)

api_con_ann_fmt<- tibble(asOf = api_con_fin_ann$data$incomeStatementTable$asOf) %>%
  reframe(rows = lapply(api_con_fin_ann$data$incomeStatementTable$rows, as.data.frame)) %>%
  tidyr::unnest(rows)

cols<-api_con_fin_ann$data$incomeStatementTable$headers
colnames(api_con_ann_fmt) <- cols

tst3 <- as.data.frame(t(api_con_ann_fmt))
colnames(tst3) <- tst3[1,]
tst3<-tst3[-1, ]
r pivot
1个回答
0
投票

我不会称其为优雅,但是

asOf
对我来说是空的,所以不需要处理它; data.frame 构建可以留给
jsonlite
(通过
content(..., simplifyVector = TRUE)
),当通过
pivot_longer()
+
pivot_wider()
时,我们不需要像转置框架那样摆弄列名:

library(httr)
library(tidyr)
library(dplyr)

url4 <- "https://api.nasdaq.com/api/company/NKE/financials?frequency=1"

response_fin_ann <- GET(url4, add_headers(`User-Agent`= "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/119.0"
                                          ,`Accept-Language`= "en-US,en;q=0.5")) 

api_con_fin_ann <- content(response_fin_ann, simplifyVector = TRUE)$data$incomeStatementTable
# switch names <-> values for rename(..., all_of(cols))
cols <- setNames(names(api_con_fin_ann$headers), api_con_fin_ann$headers)

rename(api_con_fin_ann$rows, all_of(cols)) |>
  pivot_longer(-1, names_to = "period") |>
  pivot_wider(names_from = 1, values_from = value)
#> # A tibble: 4 × 20
#>   period   `Total Revenue` `Cost of Revenue` `Gross Profit` `Operating Expenses`
#>   <chr>    <chr>           <chr>             <chr>          <chr>               
#> 1 5/31/20… $51,217,000     $28,925,000       $22,292,000    ""                  
#> 2 5/31/20… $46,710,000     $25,231,000       $21,479,000    ""                  
#> 3 5/31/20… $44,538,000     $24,576,000       $19,962,000    ""                  
#> 4 5/31/20… $37,403,000     $21,162,000       $16,241,000    ""                  
#> # ℹ 15 more variables: `Research and Development` <chr>,
#> #   `Sales, General and Admin.` <chr>, `Non-Recurring Items` <chr>,
#> #   `Other Operating Items` <chr>, `Operating Income` <chr>,
#> #   `Add'l income/expense items` <chr>,
#> #   `Earnings Before Interest and Tax` <chr>, `Interest Expense` <chr>,
#> #   `Earnings Before Tax` <chr>, `Income Tax` <chr>, `Minority Interest` <chr>,
#> #   `Equity Earnings/Loss Unconsolidated Subsidiary` <chr>, …

创建于 2024-01-17,使用 reprex v2.0.2

© www.soinside.com 2019 - 2024. All rights reserved.