Dear Anthony, Thanks again for your reply. The following worked for merge:
merged_data <- merge(shapes_fips,max_change,by="FIPS",all.x=T, all.y=F) However, I think I am doing something wrong - as I have 3109 FIPS code in my original data but when I merge with the shapes file SpatialPolygonsDataFrame, its not merging properly, many NA. Is it a good idea to convert the shapefiles into data.frame/data.table for merging and then transform it back to shapefiles? This is what I have been doing: shapes <- readShapePoly("F:/GCM//tl_2014_us_county/tl_2014_us_county.shp") > shapes <- as.data.frame(shapes) > setnames(shapes, "GEOID", "FIPS") > > 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) > > merged_data <- merge(shapes_fips,max_change,by="FIPS",all.x=F, all.y=T) > merged_data <- as.data.table(merged_data) > merged_data <- merged_data[with(merged_data, order(FIPS)), ] > > shapes$change <- merged_data$change Thanks again! Sincerely, Shouro On Tue, May 5, 2015 at 6:00 PM, Anthony Damico <ajdam...@gmail.com> wrote: > 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 <sho...@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 <ajdam...@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 <sho...@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@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 >> >> > -- 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]] ______________________________________________ R-help@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.