web-dev-qa-db-ja.com

Rを使用して圧縮データファイルをダウンロードし、.csvを抽出してインポートする

[〜#〜] r [〜#〜]を使用してWebページから.csvファイルをダウンロードして抽出しようとしています。

この質問は Rを使用して圧縮データファイルをダウンロードし、データを抽出してインポートする の複製です。

ソリューションを機能させることができませんが、使用しているWebアドレスが原因である可能性があります。

http://data.worldbank.org/country/united-kingdomdownload dataドロップの下から.csvファイルをダウンロードしようとしていますダウン)

上記のリンクから@Dirkのソリューションを使用して、私は試しました

temp <- tempfile()
download.file("http://api.worldbank.org/v2/en/country/gbr?downloadformat=csv",temp)
con <- unz(temp, "gbr_Country_en_csv_v2.csv")
dat <- read.table(con, header=T, skip=2)
unlink(temp)

ページのソースコードを確認して拡張リンクを取得しましたが、問題の原因となっていると思いますが、アドレスバーに貼り付けても機能します。

ファイルは正しいGBでダウンロードされます

download.file("http://api.worldbank.org/v2/en/country/gbr?downloadformat=csv",temp)
# trying URL 'http://api.worldbank.org/v2/en/country/gbr?downloadformat=csv'
# Content type 'application/Zip' length 332358 bytes (324 Kb)
# opened URL
# downloaded 324 Kb

# also tried unzip but get this warning
con <- unzip(temp, "gbr_Country_en_csv_v2.csv")
# Warning message:
# In unzip(temp, "gbr_Country_en_csv_v2.csv") :
# requested file not found in the Zip file

しかし、これらは私が手動でダウンロードしたときのファイル名です。

私はどこが間違っているのかいくつかの助けに感謝します、ありがとう

Windows 8、Rバージョン3.1.0を使用しています

16
user2957945

データをダウンロードして解凍するには、mode="wb"を設定する必要があります

download.file("...",temp, mode="wb")
unzip(temp, "gbr_Country_en_csv_v2.csv")
dd <- read.table("gbr_Country_en_csv_v2.csv", sep=",",skip=2, header=T)

デフォルトはテキストファイルを想定した「w」のようです。プレーンなcsvファイルの場合は問題ありません。ただし、圧縮されているため、バイナリファイルであり、「wb」です。 「wb」部分がないと、Zipをまったく開くことができません。

19
MrFlick

Word Bank Developmet Indictorsは WDIパッケージ を使用して取得できます。例えば、

library(WDI)
inds <- WDIsearch(field = "indicator")[, 1]
GB <- WDI("GB", indicator = inds)

詳細については、 WDIsearch および [〜#〜] wdi [〜#〜] 関数および rerferenceマニュアル を参照してください。

5
G. Grothendieck

それはほとんどすべてが大丈夫です。この場合、コンマ区切りファイルであることを指定するだけで済みます。たとえば、sep=","read.tableを使用します。

temp <- tempfile()
download.file("http://api.worldbank.org/v2/en/country/gbr?downloadformat=csv", 
              temp)
con <- unz(temp, "gbr_Country_en_csv_v2.csv")
dat <- read.table(con, header=T, skip=2, sep=",")
unlink(temp)

この小さな変更で、CSVをスムーズにインポートできます。

HTH、ルカ

4
Luca Braglia