Подтвердить что ты не робот

Использование R для загрузки zipped файла данных, извлечения и импорта .csv

Я пытаюсь загрузить и извлечь CSV файл с веб-страницы с помощью R.

Этот вопрос является дубликатом Использование R для загрузки файлов с данными в формате zipped, извлечения и импорта.

Я не могу заставить решение работать, но это может быть связано с используемым мной веб-адресом.

Я пытаюсь загрузить CSV файлы из http://data.worldbank.org/country/united-kingdom (в раскрывающемся списке скачать данные)

Используя решение @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

4b9b3361

Ответ 1

Чтобы ваши данные загружались и распаковывались, вам нужно установить 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" вы не можете открывать почтовый индекс вообще.

Ответ 2

Это почти все нормально. В этом случае вам нужно указать только файл, разделенный запятыми, например, используя 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, Luca

Ответ 3

Знаки Word Bank Developmet Indictors могут быть получены с помощью пакета WDI. Например,

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

Смотрите WDIsearch и WDI функции и руководство по rerference для получения дополнительной информации.