我正在尝试从以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文件中,但是由于名称更改,从网站读取它们时会遇到问题。
非常感谢任何想法!
答案 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)