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, -0.904829303986895, > -1.47141054005866, -1.58621746782168, -1.49938750670105, -1.47141054005866 > )), .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, all.y=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, -0.904829303986895, > -1.47141054005866, -1.58621746782168, -1.49938750670105, -1.47141054005866 > )), .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 3233Apologies for the messy example, what am I doing wrong? Any help will be greatly appreciated. Thank you! Sincerely, Shouro [[alternative HTML version deleted]]
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, -0.904829303986895, > > -1.47141054005866, -1.58621746782168, -1.49938750670105, > -1.47141054005866 > > )), .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, all.y=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, -0.904829303986895, > > -1.47141054005866, -1.58621746782168, -1.49938750670105, > -1.47141054005866 > > )), .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]] > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >[[alternative HTML version deleted]]
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, -0.904829303986895, >> > -1.47141054005866, -1.58621746782168, -1.49938750670105, >> -1.47141054005866 >> > )), .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, all.y=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, -0.904829303986895, >> > -1.47141054005866, -1.58621746782168, -1.49938750670105, >> -1.47141054005866 >> > )), .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]] >> >> ______________________________________________ >> R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see >> https://stat.ethz.ch/mailman/listinfo/r-help >> PLEASE do read the posting guide >> http://www.R-project.org/posting-guide.html >> and provide commented, minimal, self-contained, reproducible code. >> > >-- Shouro Dasgupta PhD Candidate | Department of Economics Ca' Foscari University of Venezia ------------------------------ Junior Researcher | Fondazione Eni Enrico Mattei (FEEM) Isola di San Giorgio Maggiore, 8 | 30124 Venice, Italy Tel: +39 041 2700 436 [[alternative HTML version deleted]]