Hi Sam, x2 should be available as whatever name you assigned to it, e.g. as your.object in the following:
your.object <- joinAttributeTable(polyshape, dframe, xcolname, ycolname) Anyway, glad it at least still work for the reordering issue. Cheers, Lyndon On Wed, Nov 2, 2011 at 2:08 PM, Sam Rabin <sra...@princeton.edu> wrote: > Lyndon — > > I couldn't figure out how to get x2 out of the function and into my workspace > so I could save it as a shapefile. I instead converted your code into a > script to run it, and it works like a charm. Thanks very much! > > Sam > > > > On Nov 2, 2011, at 12:27 PM, Lyndon Estes wrote: > >> Hi Sam, >> >> I wrote the following function a while ago to account for this problem >> of dataframe row reordering relative to the polygon IDs: >> >> joinAttributeTable <- function(x, y, xcol, ycol) { >> # Merges data frame to SpatialPolygonsDataFrame, keeping the correct >> order. Code from suggestions at: >> # https://stat.ethz.ch/pipermail/r-sig-geo/2008-January/003064.html >> # Args: >> # x: SpatialPolygonsDataFrame >> # y: Name of data.frame to merge >> # xcol: Merge column name >> # ycol: Merge column name >> # Returns: Shapefile with merged attribute table >> >> x$sort_id <- 1:nrow(as(x, "data.frame")) # Column containing >> original row order for later sorting >> >> x.dat <- as(x, "data.frame") # Create new data.frame object >> x.dat2 <- merge(x.dat, y, by.x = xcol, by.y = ycol) # Merge >> x.dat2.ord <- x.dat2[order(x.dat2$sort_id), ] # Reorder back to original >> x2 <- x[x$sort_id %in% x.dat2$sort_id, ] # Make new set of polygons, >> dropping those which aren't in merge >> x2.dat <- as(x2, "data.frame") # Make updated x2 into a data.frame >> row.names(x.dat2.ord) <- row.names(x2.dat) # Reassign row.names from >> original data.frame >> x2@data <- x.dat2.ord # Assign to shapefile the new data.frame >> return(x2) >> } >> >> I haven't used this in a while, so I hope it still works. I think >> others could suggest a more efficient, existing method for dealing >> with this as well. >> >> Cheers, Lyndon >> >> >> On Wed, Nov 2, 2011 at 12:12 PM, Sam Rabin <sra...@princeton.edu> wrote: >>> Hello! >>> >>> I have a shapefile (.shp) containing the Landsat grid coverage of South >>> America. I also have 97 other shapefiles, each of which covers one of the >>> Landsat grid cells (the 97 being a subset of the cells in the first >>> shapefile). I managed to get R (via maptools) to perform a calculation on >>> each of the 97 and put the results in a data frame. Among other things, >>> this data frame contains a column for grid cell ID that matches up with a >>> column in the Landsat grid shapefile. I used merge() to combine these and >>> then saved a new shapefile, following the instructions at >>> http://help.nceas.ucsb.edu/R:_Spatial#Append_a_second_set_of_attributes_to_a_spatial_data_file.27s_attribute_table. >>> Here is the code I used: >>> >>> require(maptools) >>> landsat1 = readShapePoly("landsat_grid") >>> # Make a backup >>> landsat_orig = landsat1 >>> landsat_2_spdf = >>> merge(landsat1@data,newcalc,by.x="PR",by.y="pr2",all.x=TRUE,sort=FALSE) >>> landsat1@data = landsat_2_spdf >>> writeSpatialShape(landsat1, "methodA") >>> >>> Looking at the new data with >>> >>> View(landsat1@data), >>> >>> it seemed like everything went great. The ID's matched up perfectly, and I >>> checked some of the calculated figures and they matched, too. The polygons >>> from landsat_grid.shp that were not included in the 97 were assigned NA for >>> the column with the calculated figures, appropriately. >>> >>> Unfortunately, when I imported the new shapefile to my GIS program, all the >>> tiles were rearranged. screenshot_expectedcoverage >>> (http://tinyurl.com/3nbm3q7 ) shows fine-scale data for what I was >>> expecting (Amazonia; imagine a polygon drawn around all the data there), >>> and screenshot_methodA (http://tinyurl.com/3htvlga) shows what I got. (Only >>> the 97 polygons are shown.) >>> >>> I tried changing sort to TRUE in the fourth line (and the output shapefile >>> name to "methodB"), but the tiles are still messed up, just differently — >>> see screenshot_methodB (http://tinyurl.com/3h95vr3). >>> >>> In both shape files, the attribute tables look fine, but the tiles are just >>> totally rearranged. They're not all scattered over the world, either. In >>> screenshot_rearrangement (which shows all tiles, not just the 97) >>> (http://tinyurl.com/6xfabvm), you can see that they cover South America >>> perfectly — they all line up with the polygons from landsat_grid.shp (not >>> shown). >>> >>> What do I need to do to fix this? >>> >>> Thanks very much in advance. >>> >>> >>> >>> Sam Rabin >>> Graduate student >>> Princeton University >>> Ecology & Evolutionary Biology >>> >>> >>> >>> >>> >>> >>> [[alternative HTML version deleted]] >>> >>> >>> _______________________________________________ >>> R-sig-Geo mailing list >>> R-sig-Geo@r-project.org >>> https://stat.ethz.ch/mailman/listinfo/r-sig-geo >>> >>> > > _______________________________________________ R-sig-Geo mailing list R-sig-Geo@r-project.org https://stat.ethz.ch/mailman/listinfo/r-sig-geo