Sto lavorando con maps
e ggplot2
per visualizzare il numero di determinati crimini in ciascuno stato per diversi anni. Il set di dati con cui sto lavorando è stato prodotto dall'FBI e può essere scaricato dal loro sito o dallo here (se non si desidera scaricare il set di dati non ti biasimo, ma è troppo grande per copiare e incollare in questa domanda e includere una frazione del set di dati non sarebbe di aiuto, in quanto non ci sarebbero abbastanza informazioni per ricreare il grafico).Mappe, ggplot2, riempimento per stato mancano alcune aree sulla mappa
Il problema è più semplice di quanto descritto.
Come si può vedere in California manca un grande pezzo, così come un paio di altri stati. Ecco il codice che ha prodotto questa trama:
# load libraries
library(maps)
library(ggplot2)
# load data
fbi <- read.csv("http://www.hofroe.net/stat579/crimes-2012.csv")
fbi <- subset(fbi, state != "United States")
states <- map_data("state")
# merge data sets by region
fbi$region <- tolower(fbi$state)
fbimap <- merge(fbi, states, by="region")
# plot robbery numbers by state for year 2012
fbimap12 <- subset(fbimap, Year == 2012)
qplot(long, lat, geom="polygon", data=fbimap12,
facets=~Year, fill=Robbery, group=group)
Questo è ciò che i dati states
assomiglia:
long lat group order region subregion
1 -87.46201 30.38968 1 1 alabama <NA>
2 -87.48493 30.37249 1 2 alabama <NA>
3 -87.52503 30.37249 1 3 alabama <NA>
4 -87.53076 30.33239 1 4 alabama <NA>
5 -87.57087 30.32665 1 5 alabama <NA>
6 -87.58806 30.32665 1 6 alabama <NA>
E questo è ciò che i dati fbi
assomiglia:
Year Population Violent Property Murder Forcible.Rape Robbery
1 1960 3266740 6097 33823 406 281 898
2 1961 3302000 5564 32541 427 252 630
3 1962 3358000 5283 35829 316 218 754
4 1963 3347000 6115 38521 340 192 828
5 1964 3407000 7260 46290 316 397 992
6 1965 3462000 6916 48215 395 367 992
Aggravated.Assault Burglary Larceny.Theft Vehicle.Theft abbr state region
1 4512 11626 19344 2853 AL Alabama alabama
2 4255 11205 18801 2535 AL Alabama alabama
3 3995 11722 21306 2801 AL Alabama alabama
4 4755 12614 22874 3033 AL Alabama alabama
5 5555 15898 26713 3679 AL Alabama alabama
6 5162 16398 28115 3702 AL Alabama alabama
I quindi unì i due set lungo region
. Il sottoinsieme che sto cercando di tracciare è
region Year Robbery long lat group
8283 alabama 2012 5020 -87.46201 30.38968 1
8284 alabama 2012 5020 -87.48493 30.37249 1
8285 alabama 2012 5020 -87.95475 30.24644 1
8286 alabama 2012 5020 -88.00632 30.24071 1
8287 alabama 2012 5020 -88.01778 30.25217 1
8288 alabama 2012 5020 -87.52503 30.37249 1
... ... ... ...
Qualche idea su come posso creare questa trama senza quei brutti punti mancanti?
+1 Grazie @jazzurro, funziona alla grande. Qualche idea su cosa '' 'inner_join''' sta facendo diversamente da' '' merge'''? – Ramanudles
@epwalsh Ho rivisto la mia risposta. Dare un'occhiata. 'unire' e' inner_join' fanno lo stesso lavoro. Ma il primo ha incasinato la colonna, ordine. Lo vedrai sopra. – jazzurro
interessante ... Immagino che '' 'inner_join''' sia più robusto. – Ramanudles