1
我希望在美國某個州的所有氣象站點上從01/01/1981到2016年12月31日以CSV格式下載每日摘要數據;但是,這大大超過了可以一次手動下載的數據限制。我希望數據以公制爲單位,包括電臺名稱和地理位置。如何使用R通過FTP鏈接從NOAA下載每日摘要數據?
是否可以通過FTP鏈接使用R下載此數據?如果是這樣,任何人都可以解釋如何做到這一點,或指出我在正確的方向?
任何幫助將不勝感激!
我希望在美國某個州的所有氣象站點上從01/01/1981到2016年12月31日以CSV格式下載每日摘要數據;但是,這大大超過了可以一次手動下載的數據限制。我希望數據以公制爲單位,包括電臺名稱和地理位置。如何使用R通過FTP鏈接從NOAA下載每日摘要數據?
是否可以通過FTP鏈接使用R下載此數據?如果是這樣,任何人都可以解釋如何做到這一點,或指出我在正確的方向?
任何幫助將不勝感激!
假設ftp設置遵循標準化格式(給定其NOAA和縱向,我認爲這是一個安全的假設),您可以使用許多迭代器之一來製作url列表和調用download.file()拉普利或地圖。以下是我用地圖調用人口普查LEHD數據的一些示例代碼。不幸的是,它不是一個使用你的數據的直接例子,因爲我不能讓鏈接工作,所以你必須修改一下。但基本的邏輯是你可以找到URL的哪些部分發生變化,使這些部分變量並提供你需要的值,然後調用。這相對簡單。在這種情況下,變化的主要變量是州縮寫和年份。因爲我只需要兩年時間,我可以直接輸入這些內容,但是我使用底格里斯軟件包來獲取獨特的州名縮寫。
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)
你有鏈接到NOAA的FTP站點嗎?可以創建一個鏈接列表並使用download.file()函數,或者如果您喜歡命令行方法,則可以使用system()命令。假設你不需要特殊的密碼權限,它應該相對簡單。 – elmuertefurioso
感謝您的建議,並抱歉響應緩慢。我認爲這是到FTP的鏈接:ftp://ftp.ncdc.noaa.gov/pub/data/ghcn/daily/。我將看看download.file()函數。 – Powege