1

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

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

任何帮助将不胜感激!

4

1 回答 1

0

假设 ftp 设置遵循标准化格式(鉴于它的 NOAA 和纵向,我认为这是一个安全的假设),您可以使用 lapply 或 map 等众多迭代器之一制作 url 和调用 download.file() 的列表。这是我用来使用 map 调用 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)
于 2017-07-13T16:43:33.577 回答