so check the unique number of fips codes in the objects before and after
merged_data <- merge(shapes_fips,max_change,by="FIPS",all.X=T, all.y=T)
also note that all.X should be all.x and you might want to use FALSE for
one or both of those
On Tue, May 5, 2015 at 11:40 AM, Shouro Dasgupta <shouro at gmail.com> wrote:
Hello,
Thank you for your reply. My original data has 3109 FIPS codes. Is there
a way to merge only this data into the shapefiles? I hope I am clear.
Thank you also for the link, I am trying to do something like this:
https://gist.github.com/reubano/1281134.
Thanks again!
Sincerely,
Shouro
On Tue, May 5, 2015 at 5:21 PM, Anthony Damico <ajdamico at gmail.com>
wrote:
hi, after running each individual line of code above, check that the
object still has the expected number of records and unique county fips
codes. it looks like length( shapes$GEOID ) == 3233 but nrow( merged_data
) == 3109. the way for you to debug this is for you to go through line by
line after creating each new object :)
i'm also not sure it's safe to work with gis objects as you're doing,
there are some well-documented examples of working with tiger files here
https://github.com/davidbrae/swmap
On Tue, May 5, 2015 at 11:00 AM, Shouro Dasgupta <shouro at gmail.com>
wrote:
I am trying to plot data by FIPS code using county shapes files.
library(data.table)
library(rgdal)
library(colourschemes)
library(RColorBrewer)
library(maptools)
library(maps)
library(ggmap)
I have data by FIPS code which looks like this:
dput(head(max_change))
structure(list(FIPS = c("01001", "01003", "01005", "01007", "01009",
"01011"), pred_hist = c(5.68493780563595e-06, 5.87686839563543e-06,
5.68493780563595e-06, 5.84476370329784e-06, 5.89156133294344e-06,
5.68493780563595e-06), pred_sim = c(5.60128903156804e-06,
5.82369276823497e-06,
5.60128903156804e-06, 5.75205304048323e-06, 5.80322399836766e-06,
5.60128903156804e-06), change = c(-1.47141054005866,
-1.47141054005866, -1.58621746782168, -1.49938750670105,
)), .Names = c("FIPS", "pred_hist", "pred_sim", "change"), class =
c("data.table",
"data.frame"), row.names = c(NA, -6L), .internal.selfref = <pointer:
0x0000000000110788>)
I add leading zeroes by:
max_change <- as.data.table(max_change)
max_change$FIPS <- sprintf("%05d",as.numeric(max_change$FIPS))
I downloaded shapefiles from here:
ftp://ftp2.census.gov/geo/tiger/TIGER2014/COUNTY/.
I obtain the FIPS codes from the shapefiles and order them using:
shapes_fips <- shapes$GEOID
shapes_fips <- as.data.table(shapes_fips)
setnames(shapes_fips, "shapes_fips", "FIPS")
shapes_fips <- shapes_fips[with(shapes_fips, order(FIPS)), ]
shapes_fips$FIPS <- as.character(shapes_fips$FIPS)
Then I merge the FIPS codes with my original dataset using:
merged_data <- merge(shapes_fips,max_change,by="FIPS",all.X=T,
merged_data <- as.data.table(merged_data)
Which looks like this:
structure(list(FIPS = c("01001", "01003", "01005", "01007", "01009",
"01011"), pred_hist = c(5.68493780563595e-06, 5.87686839563543e-06,
5.68493780563595e-06, 5.84476370329784e-06, 5.89156133294344e-06,
5.68493780563595e-06), pred_sim = c(5.60128903156804e-06,
5.82369276823497e-06,
5.60128903156804e-06, 5.75205304048323e-06, 5.80322399836766e-06,
5.60128903156804e-06), change = c(-1.47141054005866,
-1.47141054005866, -1.58621746782168, -1.49938750670105,
)), .Names = c("FIPS", "pred_hist", "pred_sim", "change"), sorted =
"FIPS", class = c("data.table",
"data.frame"), row.names = c(NA, -6L), .internal.selfref = <pointer:
0x0000000000110788>)
But when I try to merged data back to the SpatialPolygonsDataFrame
called
shapes, I get the following error:
shapes$change <- merged_data$change
Error in `[[<-.data.frame`(`*tmp*`, name, value = c(-1.47141054005866,
:
replacement has 3109 rows, data has 3233
Apologies for the messy example, what am I doing wrong? Any help will
be
greatly appreciated. Thank you!
Sincerely,
Shouro
[[alternative HTML version deleted]]