Содержимое httr (req) для фрейма данных после получения данных от API

Я пытаюсь выполнить пакетное геокодирование группы адресов с помощью геокодера переписи населения США: http://geocoding.geo.census.gov/geocoder/

Я нашел этот вопрос:

Публикация в и Получение данных из API с помощью httr в R

и предложение Хэдли отлично работает, чтобы отправить мой фрейм данных в API и вернуть геокодированные адреса. Проблема, с которой я сталкиваюсь, заключается в том, как вернуть возвращенные данные в фрейм данных. Я бы прокомментировал его ответ там, но, к сожалению, поскольку это новая учетная запись, я пока не могу комментировать.

Итак, мой код выглядит следующим образом:

req <- POST("http://geocoding.geo.census.gov/geocoder/geographies/addressbatch", 
body = list(
      addressFile = upload_file("mydata.csv"),
      benchmark = "Public_AR_Census2010",
      vintage = "Census2010_Census2010"
 ), 
encode = "multipart",
verbose())
stop_for_status(req)
content(req)

Когда я запускаю content(req), я получаю данные, которые выглядят так:

"946\",\"123 MY STREET, ANYTOWN, TX,
99999\",\"Match\",\"Non_Exact\",\"123 MY STREET, ANYTOWN, TX,
99999\",\"-75.43486,80.423775\",\"95495654\",\"L\",\"99\",\"999\",\"021999\",\"3
005\"\n\"333\",\"456 MY STREET, ANYTOWN, TX, 
99999\",\"Match\",\"Exact\",\"456 MY STREET, ANYTOWN, TX, 
99999\",\"-75.38545,80.383747\",\"6546542\",\"R\",\"99\",\"999\",\"021999\",\"3002\"\n\

Я пытался использовать подход jsonlite, упомянутый здесь: Успешное принуждение объекта JSON с разбивкой на страницы в кадр данных R

а также гуглить httr/content для фрейма данных, и не повезло. Ближе всего я подошел к тому, чтобы получить то, что хочу, используя

cat(content(req, "text"), "\n"), который дает результаты, похожие на CSV, которые я мог бы использовать в качестве фрейма данных:

"476","123 MY STREET, ANYTOWN, TX, 99999","Match","Exact",
"123 MY STREET, ANYTOWN, TX,
99999","-75.438644,80.426025","654651321","L","99","999","0219999","3013"

Но мне также не удалось найти какую-либо помощь в получении результатов cat() во фрейм данных, поскольку я считаю, что функция печатает только результаты.

Когда я использую браузер и загружаю csv, я получаю обратно csv со следующими столбцами: RowID, Address, Match, MatchType, MatchedAddress, Lat, Long, StreetSide, State, County, Tract, Block.

Я бы предпочел делать это через R, поэтому конечным результатом должен быть фрейм данных с этими столбцами. Данные есть в содержимом (req), я просто не понял, как получить их во фрейме данных.

Спасибо за помощь!


person tds7    schedule 18.02.2016    source источник


Ответы (2)


Используйте textConnection, чтобы сделать его одним вкладышем

df <- read.csv(textConnection(content(req, 'text')))
person YH Wu    schedule 03.08.2017

Возможно, сейчас, спустя 6 месяцев, этот вопрос решен. Но на случай, если у других возникнет такая же проблема:

Проблема в том, что у вас отсутствует заголовок столбца в вашем списке переменных, и у вас есть два заголовка столбца для координат. И вы не можете использовать данные, предоставленные Бюро переписи населения, потому что они не предоставляют полную строку заголовка для всех переменных. Сначала отправьте вывод в файл CSV:

cat(content(req, "text"), file="reqoutput.csv")

Затем прочитайте его обратно как фрейм данных, предоставив свою собственную строку заголовка:

reqdata<-read.csv(file="reqoutput.csv", skip=1,
                  col.names = c('RowID', 'Address', 'Match', 'MatchType',
                                'MatchedAddress', 'LongLat', 'thing',
                                'Streetside', 'State', 'County', 'Tract',                
                                'Block'))

Обратите внимание, что в выводе вашего примера бюро переписи предоставляет координаты в виде одного поля в двойных кавычках, а за долготой следует широта.

После координат идет строка из девяти цифр, я не знаю, что это такое. Я назвал это «вещью».

person Kilburn    schedule 15.11.2016