【问题标题】:R loop: Downloading multiple csv files with varying dates in the urlR循环:在url中下载多个日期不同的csv文件
【发布时间】:2016-10-21 03:34:16
【问题描述】:

我想从以下网站下载一个月内所有日子的天气数据:

https://www.wunderground.com/history/airport/KSEA/2013/1/8/DailyHistory.html?format=1

我意识到这可以通过更改上述网络链接中的日期来完成。例如,1 月 9 日的链接将是

...KSEA/2013/1/9/DailyHistory.html?format=1

因此,当我单独下载这些数据时,我能够获取 csv 文件,但是当我尝试为整个月编写 for 循环时,它只是无法正常工作。以下是我用于单个文件下载的代码:

download.file(url = 'https://www.wunderground.com/history/airport/KSEA/2013/1/8/DailyHistory.html?MR=1&format=1',
              destfile = "/Users/ABCD/Desktop/weather.csv") 

任何帮助将不胜感激。

【问题讨论】:

  • “我的 X 有问题,这是我的 Y 代码。”您能否请edit您的问题包括不起作用的for循环?
  • 您是否查看过weatherData 包。这可能会让事情变得容易一些。

标签: r loops date export-to-csv


【解决方案1】:

您可能会感到惊讶,在网址中添加“2013/01/08”而不是“2013/1/8”也有效。这让事情变得更容易,因为我们可以在 R 中使用“日期”对象。

以下函数将下载从开始日期(例如“2013/01/01”)到结束日期(例如“2013/02/28”)的所有数据。您可以自定义开始日期和结束日期。最后,下载的文件将是例如“/Users/ABCD/Desktop/weather/2013-01-01.csv”。 (需要先创建目录“/Users/ABCD/Desktop/weather”)。

mydownload <- function (start_date, end_date) {
  start_date <- as.Date(start_date)  ## convert to Date object
  end_date <- as.Date(end_date)  ## convert to Date object
  dates <- as.Date("1970/01/01") + (start_date : end_date)  ## date sequence
  ## a loop to download data
  for (i in 1:length(dates)) {
    string_date <- as.character(dates[i])
    myfile <- paste0("/Users/ABCD/Desktop/weather/", string_date, ".csv")
    string_date <- gsub("-", "/", string_date)  ## replace "-" with "/"
    myurl <- paste("https://www.wunderground.com/history/airport/KSEA", string_date, "DailyHistory.html?MR=1&format=1", sep = "/")
    download.file(url = myurl, destfile = myfile, quiet = TRUE)
    }
  }

mydownload("2013/01/01", "2013/02/28")

评论:

  1. 一开始我用

    for (mydate in dates) {
      string_date <- as.character(mydate)
    

    但答案不对。不知何故 mydate 已被强制转换为整数。最后我不得不做

    for (i in 1:length(dates)) {
      string_date <- as.character(dates[i])
    
  2. 在这里使用for 循环是不错的选择。无需执行lapply 或类似操作,因为download.file() 需要相当长的时间,因此循环开销微不足道。

【讨论】:

  • 感谢您的帮助,但请尝试打开使用上述代码生成的文件,它复制了 csv 文件中网络链接的 html 代码,而不是链接的实际文本。因此,循环确实在这里工作,但生成的文件没有我正在寻找的信息。我想知道这是否与日期格式有关!
猜你喜欢
  • 2018-02-15
  • 1970-01-01
  • 1970-01-01
  • 2015-11-21
  • 1970-01-01
  • 1970-01-01
  • 2018-12-14
  • 1970-01-01
  • 2017-07-26
相关资源
最近更新 更多