我正在执行响应 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, ]
我不会称其为优雅,但是
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