如何使用R

时间:2018-12-17 22:44:46

标签: r url download

我正尝试使用R从the Canadian Government's national weather and climate data reporting service批量下载气候数据。这是通过他们的网站提供的说明,这些说明说明了如何使用Cygwin进行此操作,不过,我希望希望将文件检索作为R中脚本的一部分包括在内,该脚本会反复获取多个站点和时间范围的数据并对其进行处理等。我对R有点陌生,因此在此过程中遇到了麻烦。 / p>

  

Readme.txt

     

基于URL的过程,可从Climate网站自动批量下载数据   (http://www.climate.weather.gc.ca)   版本:2016-05-10

     

环境与气候变化加拿大

     

要在线阅读此文件,请访问:   ftp://client_climate@ftp.tor.ec.gc.ca/Pub/Get_More_Data_Plus_de_donnees/

     

文件夹:Get_More_Data_Plus_de_donnees> Readme.txt

     

有关如何从环境与气候变化加拿大气候网站下载一个气象站所有天气数据的说明:

     

国家档案馆中气候站的每日更新列表,包括气候ID,站ID,WMO ID,TC ID和坐标,可在以下文件夹中找到:
  Get_More_Data_Plus_de_donnees>电台清单EN.csv

     

使用以下实用程序下载数据:
  wget(GNU / Linux操作系统)
  Cygwin(Windows操作系统)https://www.cygwin.com
  自制软件(OS X-Apple)http://brew.sh/

     

示例以1998年至2008年以.csv格式下载黄刀A的所有可用小时数据的方法

     

命令行:

     

在`seq 1998 2008'中用于年份;在'seq 1 12'中用于月份;执行wget --content-disposition“ http://climate.weather.gc.ca/climate_data/bulk_data_e.html?format= csv&stationID = 1706&Year = $ {year}&Month = $ {month}&Day = 14&timeframe = 1&submit = Download + Data“; done; done

     

位置:
  年=命令行中的更改值(`seq 1998 2008`)   month =在命令行中更改值(`seq 1 12`)
  format = [csv | xml]:格式输出
  timeframe = 1:用于每小时数据
  timeframe = 2:用于每日数据
  timeframe = 3:用于每月数据
  日期:“ day”变量的值未使用,可以是任意值   对于另一个工作站,更改变量stationID的值   对于XML格式的数据,在URL中将变量格式的值更改为xml。

     

有关法语信息,请使用++ T%C3%A9l%C3%A9charger +%0D%0Ades + donn%C3%A9es更改下载+数据,并在url中用_f更改_e。

     

如有疑问或疑虑,请联系我们的国家气候服务办公室,网址为:   ec.services.climatiques-climate.services.ec@canada.ca

如上所述,Cygwin命令为:

for year in `seq 2015 2018`;do for month in `seq 1 12`;do wget --content-disposition "http://climate.weather.gc.ca/climate_data/bulk_data_e.html?format=csv&stationID=51459&Year=${year}&Month=${month}&Day=14&timeframe=1&submit=Download+Data" ;done;done

我知道download.file()有一个wget的选项,就像Cygwin命令所使用的那样,但是,当我尝试以下操作时:

download.file("http://climate.weather.gc.ca/climate_data/bulk_data_e.html?format=csv&stationID=51459&Year=$2018&Month=$12&Day=14&timeframe=2&submit=Download+Data","X:/folderX/example.csv", method = "wget")

我遇到'wget' call had nonzero exit status错误。

不确定这与Cygwin命令中的--content-disposition有什么关系,还是不确定我是否正在使用正确的功能来实现这一点,因此非常感谢任何方向。

谢谢。

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

您发布的链接中没有任何有用的信息。它似乎是某种着陆页,但其中不包含任何与天气相关的数据。无论如何,这是如何遍历URL数组并从中下载数据。只需对其进行修改即可满足您的需求。

library(RCurl);library(XML)

pageNum <- seq(1:10)
url <- paste0("http://www.totaljobs.com/JobSearch/Results.aspx?Keywords=Leadership&LTxt=&Radius=10&RateType=0&JobType1=&CompanyType=&PageNum=") 
urls <- paste0(url, pageNum) 

allPages <- lapply(urls, function(x) getURLContent(x)[[1]])
xmlDocs <- lapply(allPages, function(x) XML::htmlParse(x))

这是另一个例子。

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("C:/Users/Excel/Desktop/weather/", string_date, ".csv")
    string_date <- gsub("-", "-", string_date)  ## replace "-" with "/"
    myurl <- paste("https://sci.ncas.ac.uk/leedsweather/Archive/CUSTOM-ARC-", string_date, "-METRIC.csv", sep = "")
    download.file(url = myurl, destfile = myfile, quiet = TRUE)
    }
  }

mydownload("2013/11/25", "2013/11/30")

答案 2 :(得分:0)

正如@EmilyKothe所说,您可以使用R weathercan软件包批量下载ECCC站数据。我发现这仍然有些烦人,因为不是每个人都使用R。

因此,我基于weathercan功能构建了一个Shiny Web应用程序: https://nickrongkp.shinyapps.io/WeatherCan/ 该应用程序托管在shinyapps.io(运行时间有限的免费帐户)上,因此,为他人着想,请在完成后立即关闭浏览器。

源代码: https://github.com/nickyrong/ShinyWeatherCan