从URL读取多个具有不同名称的.csv文件

时间:2020-06-29 19:32:06

标签: r csv url

我正在尝试从以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文件中,但是由于名称更改,从网站读取它们时会遇到问题。

非常感谢任何想法!

1 个答案:

答案 0 :(得分: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)