Based on this, you can create new variables in your data.frame
We use mapply() to process your coordinates and return the results to the res list.
res <- mapply(FUN = function(lon, lat) { revgeocode(c(lon, lat), output = "more") }, df$lon, df$lat )
Then we use rbindlist() from data.table to convert the list to data.frame (with fill = TRUE , since not all res elements have the same lengths, i.e. some results do not return street_number and postal_code ) and cbind() to the original data
cbind(df, data.table::rbindlist(res, fill = TRUE))
Update
Following your comment, if you want to process more than 2500 requests , you can sign up for a premium Google Maps API plan to unlock higher quotas. You can then pass your revgeocode() credentials using the signature and client options.
As mentioned in the documentation :
By purchasing a license for the premium Google Maps API Maps plan, you will receive a welcome email from Google that contains your customer ID and your secret key.
The customer ID is used to access the special features of the Google Maps API Premium Plan. All customer IDs begin with the gme prefix. Pass the client ID as the value of the client parameter. A unique digital signature is created using your private cryptographic key. Pass this signature as the value of the signature parameter.
You can see how it works under the hood by examining the revgeocode() source and see how the URL is constructed:
sensor4url <- paste("&sensor=", sensor, sep = "") client4url <- paste("&client=", client, sep = "") signature4url <- paste("&signature=", signature, sep = "") url_string <- paste("http://maps.googleapis.com/maps/api/geocode/json?latlng=", loc4url, sensor4url, sep = "") if (userType == "business") { url_string <- paste(url_string, client4url, signature4url, sep = "") }
Data
df <- structure(list(lat = c(32.31, 32.19, 34.75, 35.09, 35.35, 34.74 ), lon = c(119.827, 119.637, 119.381, 119.364, 119.534, 119.421 )), .Names = c("lat", "lon"), row.names = c(21L, 32L, 37L, 48L, 50L, 89L), class = "data.frame")