On Wed, 23 Jan 2008, stefan lhachimi wrote: > Hello, > I am having a spatial object by reading a shp-file by the > readShapePoly command. I now want to add data into the > SpatialPolygonsDataFrame from an external source (its a dataframe > which has a common key SHN_N). I am using the merge command, which I > thought works fine, unitl I realized that "map.kreise" now became just > a data.frame.
merge() is a "false friend", because a SpatialPolygonsDataFrame can be coerced to a data.frame, which is what merge() does without asking. It may be best to say corece first, merge() the two data.frames, and rebuild the SpatialPolygonsDataFrame with SpatialPolygonsDataFrame(). map.kreise.df <- as(map.kreise, "data.frame") map.kreise.df1 <- merge(map.kreise.df, INC, sort=FALSE, by.x="SHN_N", by.y="SHN_N", all.x=TRUE, all.y=TRUE) map.kreise1 <- SpatialPolygonsDataFrame(as(map.kreise, "SpatialPolygons"), data=map.kreise.df1) which may fail if INC and map.kreise.df have different row.names. The argument match.ID= (default TRUE) to SpatialPolygonsDataFrame matches the polygon IDs to the data= row.names - they must agree exactly though the data frame rows will be re-ordered to match the polygons if only the orders differ. Your concern here is real, which is why the argument is there. If you don't need merge to manipulate the data frames, you can go straight for: all.equal(row.names(INC), row.names(as(map.kreise, "data.frame")) map.kreise1 <- spCbind(map.kreise, INC) if the row.names of INC match the polygon IDs, and thus the row.names of as(map.kreise, "data.frame"), see ?spCbind in maptools, and the example included there. Hope this helps, Roger > My greatest fear in working with spatial objects is that, if I don't > have them in one object, I end up plotting a value for the wrong > region. So is there a way to use merge or what is the most appropriate > way to combine data? > > map.kreise<-readShapePoly("vg250krs",IDvar="KRS_ID",verbos=TRUE) # > reads the shape file > map.kreise<-merge(map.kreise,INC,sort = FALSE,by.map.kreise="SHN_N", > by.INC="SHN_N",all.map.kreise=T,all.INC=T) > > Thanks a lot in advance, > Stefan > > _______________________________________________ > R-sig-Geo mailing list > R-sig-Geo@stat.math.ethz.ch > https://stat.ethz.ch/mailman/listinfo/r-sig-geo > -- Roger Bivand Economic Geography Section, Department of Economics, Norwegian School of Economics and Business Administration, Helleveien 30, N-5045 Bergen, Norway. voice: +47 55 95 93 55; fax +47 55 95 95 43 e-mail: [EMAIL PROTECTED] _______________________________________________ R-sig-Geo mailing list R-sig-Geo@stat.math.ethz.ch https://stat.ethz.ch/mailman/listinfo/r-sig-geo