Как я могу загружать ежедневные сводные данные из NOAA по FTP-ссылке, используя R?
Я хотел бы загружать ежедневные сводные данные в формате CSV со всех метеостанций в данном штате США в период с 01.01.1981 г. по 31.12.2016; однако это значительно превышает предел данных, который можно загрузить сразу вручную. Я хотел бы, чтобы данные были в метрических единицах и включали название станции и географическое местоположение.
Можно ли загрузить эти данные по FTP-ссылке, используя R? Если так, кто-нибудь сможет объяснить, как это сделать, или указать мне правильное направление?
Любая помощь будет принята с благодарностью!
1 ответ
Предполагая, что настройка ftp следует стандартному формату (учитывая его NOAA и продольную, я думаю, что это безопасное предположение), вы можете составить список URL-адресов и вызова download.file(), используя один из многих итераторов, таких как lapply или map. Вот пример кода, который я использовал для вызова данных переписи LEHD с помощью map. К сожалению, это не прямой пример использования ваших данных, потому что я не могу заставить работать ссылку, поэтому вам придется немного изменить. Но основная логика заключается в том, что вы находите, какие части 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)