2013-07-10 4 views
1

J'ai joué avec le paquet ggmap R et j'aime vraiment les fonctions de traçage pour afficher les données géographiques. J'ai essayé de faire des graphiques simples de quelques données de population de la ville que j'ai avec la fonction geocode, mais je n'arrive pas à comprendre comment organiser les données de façon logique. En l'état actuel, j'ai données structurées dans une liste comme siComment ajouter des listes à un bloc de données R?

   City Type Population 
1   Detroit city  713777 
2  Grand Rapids city  188040 
3   Warren city  134056 
4 Sterling Heights city  129699 
5   Lansing city  114297 
6  Ann Arbor city  113934 

et je voudrais ajouter « colonnes » avec les entrées de latitude et de longitude retournées par geocode. Plus précisément, si le dataframe ci-dessus est nommé Michigan, je suis preneuse coordonnées avec

lapply(as.vector(michigan$City), geocode) 

qui prend une chaîne (dans ce cas, un nom de ville) et utilise les cartes Google Maps api pour deviner les coordonnées, la production d'une liste des listes:

[[1]] 
     lon  lat 
1 -83.04575 42.33143 

[[2]] 
     lon  lat 
1 -85.66809 42.96336 

[[3]] 
     lon lat 
1 -83.0282 42.493 

[[4]] 
     lon  lat 
1 -83.0302 42.58031 

[[5]] 
     lon  lat 
1 -84.55553 42.73253 

[[6]] 
     lon  lat 
1 -83.74304 42.28083 

Je voudrais ajouter la latitude et les valeurs de longitude à la trame de données michigan comme « colonnes », mais parce que le résultat de mon lapply est une liste de listes, cela est plus compliqué que simplement trancher quelques tableaux - quelle est la meilleure façon de le faire idiomatiquement dans R?

+1

Pouvez-vous poster quelques exemples de code et les données que vous utilisez pour la fonction 'géocodage()'? La réponse courte utilise probablement la fonction 'merge()', sauf si vos données sont vraiment bien structurées, auquel cas 'cbind()' peut être suffisant. – David

+2

Essayez 'ldply' de ** plyr ** au lieu de' lapply' ou 'do.call (rbind, ...)' sur le résultat. – joran

+0

Salut. Où est Traverse City? –

Répondre

5

Il est aussi simple que:

cbind(your_df, geocode(your_df$City)) 
+1

+1. C'est en fait 'cbind.data.frame' qui sera appelé. –

Questions connexes