如何使用R通过FTP链接从NOAA下载每日摘要数据?

时间:2017-07-06 12:59:36

标签: r ftp noaa

我想在1981年1月1日至2016年12月31日期间从美国某州的所有气象站下载CSV格式的每日摘要数据;但是,这大大超过了可以一次手动下载的数据限制。我希望数据以公制单位表示,并包括电台名称和地理位置。

是否可以使用R通过FTP链接下载此数据?如果是这样,是否有人能够解释如何做到这一点,或指出我正确的方向?

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

假设ftp设置遵循标准化格式(鉴于其NOAA和纵向我认为这是一个安全的假设)你可以使用像lapply这样的许多迭代器之一来创建url和调用download.file()的列表或地图。以下是我用于使用地图调用Census LEHD数据的一些示例代码。不幸的是,它不是使用您的数据的直接示例,因为我无法使链接起作用,因此您必须稍微修改一下。但基本逻辑是你找到url的哪些部分发生变化,制作那些部分变量并提供你需要的值,然后调用。这是相对简单的。在这种情况下,更改的主要变量是州缩写和年份。因为我只需要两年时间,我可以直接输入,但我使用tigris包来获得唯一的州缩写。

if(!require(pacman)){install.packages("pacman"); library(pacman)}
p_load(tigris,purrr, dplyr)
#calls tigris "state" df to get unique state FIPS codes
us_states <- tolower(unique(fips_codes$state)[1:51])

year <- c(2004, 2014)

get_lehd <- function(states, year) {
  #grabbing all private jobs WAC
  lehd_url <- paste0("https://lehd.ces.census.gov/data/lodes/LODES7/", 
states,"/wac/", states,"_wac_S000_JT02_",year,".csv.gz")
  filenames <- paste0(states,"_", year,".csv.gz")
  download.file(lehd_url, dest = filenames)
}
#use possibly so if it kicks an error it keeps going
possible_get_lehd <- possibly(get_lehd, otherwise = NA)
#download the files to current wd
map(us_states, possible_get_lehd,year = 2004)
map(us_states, possible_get_lehd,year = 2014)