2017-07-06 12 views
1

私は、所与の米国の州のすべての気象ステーションから、01/01/1981と31/12/2016の間でCSV形式の日々の要約データをダウンロードしたいと思います。ただし、一度に手動でダウンロードできるデータ制限を大幅に超えています。私は、データがメートル法単位であり、駅名と地理的位置を含むことを望みます。Rを使用してFTPリンク経由でNOAAから日々の要約データをダウンロードするにはどうすればよいですか?

Rを使用してFTPリンク経由でこのデータをダウンロードすることはできますか?もしそうなら、誰かがこれを行う方法を説明することができますか、正しい方向に私を指す?

ご協力いただければ幸いです!

+0

NOAAのFTPサイトへのリンクはありますか?リンクのリストを作成し、download.file()関数を使用することもできますし、コマンドラインアプローチを使用する場合はsystem()コマンドを使用することもできます。あなたが特別なパスワード特権を必要としないと仮定すると、それは比較的簡単です。 – elmuertefurioso

+0

アドバイスをいただきありがとうございます。遅い回答をおかけして申し訳ありません。私はこれがFTPへのリンクだと思う:ftp://ftp.ncdc.noaa.gov/pub/data/ghcn/daily/。 download.file()関数を見ていきます。 – Powege

答えて

0

ftpの設定が標準化されていると仮定すると(NOAAと縦方向を仮定すると、これは安全な仮定です)、urlのリストを作成してdownload.file()を呼び出すことができます。礼拝や地図。ここでは、マップを使用して国勢調査LEHDデータを呼び出すために使用したコードの例を示します。残念ながら、データを使用した直接的な例ではありません。リンクが機能しないため、少し修正する必要があります。しかし、基本的なロジックは、URLのどの部分が変更されているかを見つけ出し、それらの部分変数を作成し、必要な値を提供してから呼び出すことです。それは比較的簡単です。この場合、変化する主な変数は州の略語と年です。私は2年しか必要としなかったので、それらを直接入力することができますが、私はティグリスパッケージを使用してユニークな状態の略語を取得します。

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) 
関連する問題