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

How can I download daily summaries data from NOAA via the FTP link using R?

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

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

如有任何帮助,我们将不胜感激!

假设 ftp 设置遵循标准化格式(鉴于其 NOAA 和纵向,我认为这是一个安全的假设),您可以列出 url 和调用 download.file() 使用许多迭代器之一,如 lapply 或 map。这是我用来使用地图调用人口普查 LEHD 数据的一些示例代码。不幸的是,这不是使用您的数据的直接示例,因为我无法使 link 正常工作,因此您必须稍作修改。但基本逻辑是您找到 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)