Ich ziehe es für das Parsen von JSON in R. jsonlite
verwenden
die verschachtelte JSON Liste zu analysieren, können Sie die fromJSON
Anruf innerhalb eines lapply
tun können.
jsonlite::fromJSON
versucht, das Ergebnis für Sie zu vereinfachen. Da JSON jedoch für verschachtelte Datenstrukturen ausgelegt ist, wird häufig ein dat.frame von Listen zurückgegeben. Um also das gewünschte data.frame
zu erhalten, müssen Sie wissen, welches Element der Liste Sie suchen und extrahieren.
Zum Beispiel
library(RDSTK)
library(jsonlite)
js <- coordinates2politics(Coords$Latitude, Coords$Longitude)
lst <- lapply(js, jsonlite::fromJSON)
lst[[1]]$politics
# type friendly_type name code
# 1 admin2 country Canada can
# 2 admin4 state Ontario ca08
# 3 constituency constituency Hamilton Centre 35031
# 4 constituency constituency Burlington 35010
# 5 constituency constituency Hamilton East-Stoney Creek 35032
Um die data.frame
Sie einen weiteren lapply
konstruieren können die Elemente zu extrahieren, die Sie wollen, und es dann ganz setzen entweder mit einem do.call(..., rbind)
oder meine Vorlieben ist mit data.table::rbindlist(...)
lst_result <- lapply(lst, function(x){
df <- x$politics[[1]]
df$lat <- x$location$latitude
df$lon <- x$location$longitude
return(df)
})
data.table::rbindlist(lst_result)
# type friendly_type name code lat lon
# 1: admin2 country Canada can 43.30528 -79.80306
# 2: admin4 state Ontario ca08 43.30528 -79.80306
# 3: constituency constituency Hamilton Centre 35031 43.30528 -79.80306
# 4: constituency constituency Burlington 35010 43.30528 -79.80306
# 5: constituency constituency Hamilton East-Stoney Creek 35032 43.30528 -79.80306
# 6: admin2 country Canada can 46.08333 -82.41667
# 7: admin4 state Ontario ca08 46.08333 -82.41667
Alternativ können Sie die Google-API über library(googleway)
(Disclaimer: Ich schrieb googleway) verwenden, um mehr Details zu jedem Breitengrad/Lon zu erfahren, um den Lat/Lons umzukodieren.
Dafür benötigen Sie einen gültigen Google-API-Schlüssel (die bis 2500 Anfragen pro Tag begrenzt ist, es sei denn, Sie zahlen)
library(googleway)
key <- "your_api_key"
lst <- apply(Coords, 1, function(x){
google_reverse_geocode(location = c(x["Latitude"], x["Longitude"]),
key = key)
})
lst[[1]]$results$address_components
# [[1]]
# long_name short_name types
# 1 Burlington Bay James N. Allan Skyway Burlington Bay James N. Allan Skyway route
# 2 Burlington Burlington locality, political
# 3 Halton Regional Municipality Halton Regional Municipality administrative_area_level_2, political
# 4 Ontario ON administrative_area_level_1, political
# 5 Canada CA country, political
# 6 L7S L7S postal_code, postal_code_prefix
oder in ähnliche Weise durch library(ggmap)
, auch begrenzt durch 2.500 Limit von Google.
library(ggmap)
apply(Coords, 1, function(x){
revgeocode(c(x["Longitude"], x["Latitude"]))
})
# 1
# "Burlington Bay James N. Allan Skyway, Burlington, ON L7S, Canada"
# 2
# "308 Brennan Harbour Rd, Spanish, ON P0P 2A0, Canada"
# 3
# "724 Harris Ave, San Diego, CA 92154, USA"
# 4
# "30 Cherry St, Chinook, WA 98614, USA"
# 5
# "St James Township, MI, USA"
# 6
# "US-101, Chinook, WA 98614, USA"
# 7
# "2413 II Rd, Garden, MI 49835, USA"
# 8
# "2413 II Rd, Garden, MI 49835, USA"
# 9
# "8925 S Shore Rd, Stella, ON K0H 2S0, Canada"
# 10
# "Charlevoix County, MI, USA"
Mögliche Duplikate von [JSON mit R parsen] (http://stackoverflow.com/questions/2061897/parse-json-with-r) – alistaire
@alistaire Ich habe den Beitrag gelesen und entweder bekomme ich es nicht oder es löst mein Problem nicht! Sorry, wenn es das erste ist, aber wie gesagt, ich bin neu mit JSON-Ausgabe und Listen arbeiten. –