R:读取csv文件的文件或工作表名称

时间:2020-08-03 13:41:08

标签: r

在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")

但是,这仅使我可以访问数据,但丢失了文件/工作表名称的信息。有什么建议吗?

1 个答案:

答案 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检索)中包含相同信息,因此您可以轻松地自动执行此过程。