【问题标题】:How can I download daily summaries data from NOAA via the FTP link using R?如何使用 R 通过 FTP 链接从 NOAA 下载每日摘要数据?
【发布时间】:2017-12-10 12:05:57
【问题描述】:

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

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

任何帮助将不胜感激!

【问题讨论】:

  • 您有 NOAA 的 FTP 站点的链接吗?可以创建链接列表并使用 download.file() 函数,或者如果您更喜欢命令行方法,可以使用 system() 命令。假设您不需要特殊的密码权限,它应该相对简单。
  • 感谢您的建议,并对缓慢的响应感到抱歉。我认为这是 FTP 的链接:ftp.ncdc.noaa.gov/pub/data/ghcn/daily。我来看看 download.file() 函数。

标签: r ftp noaa


【解决方案1】:

假设 ftp 设置遵循标准化格式(鉴于它的 NOAA 和纵向,我认为这是一个安全的假设),您可以使用 lapply 等众多迭代器之一列出 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)

【讨论】:

    猜你喜欢
    • 2020-05-25
    • 2021-06-13
    • 1970-01-01
    • 1970-01-01
    • 2017-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-12
    相关资源
    最近更新 更多