【问题标题】:Reading multiple .csv files with varying names from URL从 URL 读取多个具有不同名称的 .csv 文件
【发布时间】:2020-06-29 19:32:06
【问题描述】:

我正在尝试从以 http 开头的 URL 读取多个 .csv 文件。所有文件都可以在同一个网站上找到。一般文件名的结构是:yyyy_mm_dd_location_XX.csv

现在,每个月的每一天都有一个文件用于三个不同的位置(比如说 locA、locB、locC)。因此,文件名将是例如“2009_10_01_locA_XX.csv”、“2009_10_02_locA_XX.csv”等等。

结构,即所有csv文件的列数相同,但长度不同。

我想将所有这些文件合并到一个 csv 文件中,但由于名称更改而无法从网站读取它们。

非常感谢您的任何想法!

【问题讨论】:

  • 您好,欢迎来到 SO。你试过什么了?从您的问题来看,很难准确理解问题在哪里?您是否需要一种连接字符串以创建文件名的方法(即paste0)。您是否愿意收获网页(即rvestpackage)。如果没有进一步的细节告诉我们您遇到的问题,很难为您提供帮助。
  • 嗨,对不起,我尽量说得更清楚:我的最终目标是自动从网页导入数据。我可以通过手动读取 csv 文件并将它们组合使用例如: # read first file file_xexample-website/data/2009_10_01_locA_XX.csv", header = FALSE) # add second file file_y example-website/data/2009_10_01_locA_XX.csv", header = FALSE) files_combined

标签: r csv url


【解决方案1】:

这是一种以编程方式生成文件名的方法,然后运行download.file() 下载它们。由于该问题没有给出可重现的示例,因此需要将代码更改为正确的 HTTP 位置才能访问文件。

startDate <- as.Date("2019-10-01","%Y-%m-%d")

dateVec <- date + 0:4 # create additional dates by adding integers
library(lubridate)
downloadFileNames <- unlist(lapply(dateVec,function(x) {
     locs <- c("locA","locB","locC")
     paste(year(x),month(x),day(x),locs,"XX",sep="_")
}))

head(downloadFileNames)

我们打印向量的head() 以显示正确的命名模式。

> head(downloadFileNames)
[1] "2019_10_1_locA_XX" "2019_10_1_locB_XX" "2019_10_1_locC_XX"
[4] "2019_10_2_locA_XX" "2019_10_2_locB_XX" "2019_10_2_locC_XX"
>

接下来,我们将创建一个目录来存储文件并下载它们。

# create a subdirectory to store the files
if(!dir.exists("./data")) dir.create("./data")

# download files, as https://www.example.com/2019_10_01_locA_XX.csv
# to ./data/2019_10_01_locA_XX.csv, etc. 

result <- lapply(downloadFileNames,function(x){
     download.file(paste0("https://www.example.com/",x,".csv"),
                          paste0("./data/",x,".csv"))
})

下载文件后,我们可以使用list.files()检索路径名,使用read.csv()读取数据,并使用do.call()将它们组合成一个数据框。

theFiles <- list.files("./data",pattern = ".csv",full.names = TRUE)
dataList <- lapply(theFiles,read.csv)
data <- do.call(rbind,dataList)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-08
    • 2023-03-03
    • 2019-10-02
    • 2023-03-15
    • 2015-12-04
    • 2014-02-03
    • 1970-01-01
    相关资源
    最近更新 更多