2016-02-16 8 views
1

Я пытаюсь использовать пакетный геокодер Бюро переписи (http://geocoding.geo.census.gov/geocoder/Geocoding_Services_API.pdf) с R. Входные адреса находятся в кадре данных, а не в CSV. Поскольку адреса являются промежуточным этапом, я не хочу записывать их в CSV.API-интерфейс пакетного геокодирования Census с исходными адресами в кадре данных (не CSV) в R

Я прочитал несколько сообщений о stackoverflow. Решение Hadley (Posting to and Receiving data from API using httr in R) иллюстрирует, как загрузить существующий файл CSV. Решение MrFlick (Uploading a csv to an api in R) похоже на то, что я хочу, но использует строку, а не фрейм данных.

Вот что я имею в пути кода:

#generate data frame of test addresses for this example 
a = c(1, 2, 3) 
b = c("125 Worth Street", "258 Broadway", "8 Centre Street") 
c = rep("New York", 3) 
d = rep("NY", 3) 
e = c("10013","10007","10007") 
addresses = data.frame(a,b,c,d,e) 

#names specified by API documentation 
colnames(addresses) <- c("Unique ID","Street address","City","State","ZIP") 

apiurl <- "http://geocoding.geo.census.gov/geocoder/geographies/addressbatch" 

req <- POST(apiurl, body=list(
    addressFile = RCurl::fileUpload(
     filename = "test.csv", 
     contents = addresses 
    ), 
    benchmark = "Public_AR_Census2010", 
    vintage = "Census2010_Census2010" 
    ), 
    encode="multipart" 
) 
stop_for_status(req) 

Спасибо заранее.

+0

Интересно ... Что ожидаемый результат? –

+0

Почему вы не можете записать данные во временный файл, а затем удалить временный файл, когда вы закончите/выходите? – sckott

+0

Я хотел бы использовать это в базе данных записей госпитализации, чтобы получить географию переписи (блок, трактат). Поскольку я имею дело с миллионами записей, я думал, что сравниваю скорость пакетного геокодера с скоростью одного геокодера записи (применяемого посредством векторизации). – gmculp

ответ

1

если вы готовы записать данные в временный файл ...

library("httr") 
a = c(1, 2, 3) 
b = c("125 Worth Street", "258 Broadway", "8 Centre Street") 
c = rep("New York", 3) 
d = rep("NY", 3) 
e = c("10013","10007","10007") 
addresses = data.frame(a,b,c,d,e) 
colnames(addresses) <- c("Unique_ID","Street address","City","State","ZIP") 
apiurl <- "http://geocoding.geo.census.gov/geocoder/geographies/addressbatch" 
file <- tempfile(fileext = ".csv") 
write.csv(addresses, file, row.names = FALSE) 
req <- POST(apiurl, body=list(
    addressFile = upload_file(file), 
    benchmark = "Public_AR_Census2010", 
    vintage = "Census2010_Census2010" 
), 
    encode="multipart" 
) 
content(req, "text", encoding = "UTF-8") 


#> [1] "\"3\",\"8 Centre Street, New York, NY, 10007\",\"Match\",\"Non_Exact\",\"8 Centre St, NEW YORK, NY, 10013\",\"-74.00442,40.712765\",\"59660429\",\"R\",\"36\",\"061\",\"002900\",\"4019\"\n\"2\",\"258 Broadway, New York, NY, 10007\",\"No_Match\"\n\"1\",\"125 Worth Street, New York, NY, 10013\",\"Match\",\"Exact\",\"125 Worth St, NEW YORK, NY, 10013\",\"-74.0027,40.715446\",\"59660405\",\"L\",\"36\",\"061\",\"003100\",\"1012\"\n\"Unique_ID\",\"Street address, City, State, ZIP\",\"No_Match\"\n" 
+0

Спасибо, sckott! – gmculp

+0

Может удалить временный файл с помощью 'unlink' – sckott

+0

Вы читаете мой разум, sckott! Благодарим вас за отзыв. – gmculp

 Смежные вопросы

  • Нет связанных вопросов^_^