在R中导入.csv文件时,是否有可能读出文件名或工作表名称?我通过单击url生成了一个.csv: https://www.populationpyramid.net/api/pp/4/2019/?csv=true
文件的名称为“ Afghanistan-2019”,工作表名称相同。 现在我尝试使用R使用
library(readr)
df <- read_csv("https://www.populationpyramid.net/api/pp/4/2019/?csv=true")
但是,这仅使我可以访问数据,但丢失了文件/工作表名称的信息。有什么建议吗?
答案 0 :(得分:1)
您可以使用 excel_sheets
包中的readxl
函数来获取excel文件中包含的所有图纸的字符向量。
编辑:
对不起,我现在意识到您正在下载CSV文件。 CSV文件是平面文件,因此没有任何工作表名称,因此您唯一的选择是文件名。由于本质上是在查询API,因此可以使用httr
包来发送GET
请求:
library(httr)
library(stringr)
res <- httr::GET("https://www.populationpyramid.net/api/pp/4/2019/?csv=true")
这为您提供了一个response
对象,其中包含各种有趣的信息-包括实际数据(duh)和文件名。
您可以使用content
函数获取数据:
httr::content(res)
#> # A tibble: 21 x 3
#> Age M F
#> <chr> <dbl> <dbl>
#> 1 0-4 2891330 2747452
#> 2 5-9 2765393 2636519
#> 3 10-14 2614937 2501560
#> 4 15-19 2321520 2197654
#> 5 20-24 1950650 1843985
#> 6 25-29 1551332 1433056
#> 7 30-34 1255855 1138037
#> 8 35-39 1033269 954327
#> 9 40-44 834402 758533
#> 10 45-49 649695 603870
#> # … with 11 more rows
要检索文件名,我们需要增加一些创意。文件名存储在content-disposition
对象的headers
部分的res
元素中:
res$headers$`content-disposition`
#> [1] "attachment; filename=Afghanistan-2019.csv"
我们可以使用正则表达式提取它,该正则表达式会提取第一个=
之后的所有文本:
stringr::str_extract(res$headers$`content-disposition`, "(?<=\\=).*")
# [1] "Afghanistan-2019.csv"
由于response
对象应始终在相同位置(尤其是从相同API检索)中包含相同信息,因此您可以轻松地自动执行此过程。