【问题标题】:R: Read file or sheet name of a csv fileR:读取 csv 文件的文件或工作表名称
【发布时间】:2020-08-03 13:41:08
【问题描述】:

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

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

【问题讨论】:

  • 我在下面更新了我的答案,现在应该可以满足您的需求,抱歉先搞错了!

标签: r


【解决方案1】:

您可以使用readxl 包中的excel_sheets 函数来获取包含在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

要检索文件名,我们需要更多创意。文件名存储在res 对象的headers 部分的content-disposition 元素中:

res$headers$`content-disposition`
#> [1] "attachment; filename=Afghanistan-2019.csv"

我们可以用一个正则表达式来提取它,它会提取出第一个=之后的所有文本:

stringr::str_extract(res$headers$`content-disposition`, "(?<=\\=).*")

# [1] "Afghanistan-2019.csv"

由于response 对象应始终在相同位置包含相同信息(尤其是从相同 API 检索时),因此您可以轻松地自动执行此过程。

【讨论】:

    猜你喜欢
    • 2013-08-27
    • 1970-01-01
    • 2020-01-10
    • 2022-01-11
    • 2014-06-12
    • 1970-01-01
    • 2020-02-08
    • 2016-06-14
    • 1970-01-01
    相关资源
    最近更新 更多