If you have a map with/or a data table of UTM 10 x 10 km cells with the corresponding UTM codes, and want to upscale them to 20 x 20, 50 x 50 or 100 x 100 km cells, you can use the UTM10upscale function to create cell codes that group the UTM codes accordingly. This function is not included in an R package and is used as a stand-alone.
UTM10upscale <- function(UTMcode, size) { # version 1.3 (14 Mai 2013) # UTMcode: a vector string of UTM 10x10 km codes (e.g. MC58 or 29SMC58) # size: the size (in square km) of the UTM cells for which to create codes; must be 20, 50 or 100 if (missing(size)) stop ("Argument 'size' is missing, with no default.") if (!(size %in% c(20, 50, 100))) stop ("'size' must be a multiple of 10 and a divisor of 100 - i.e. 20, 50 or 100.") UTMcode <- as.character(UTMcode) nc <- unique(nchar(UTMcode)) if (length(nc) != 1) stop ("All elements of UTMcode must have the same number of characters.") utm10letters <- substr(UTMcode, nc - 4, nc -2) if(size == 100) upscaled.code <- utm10letters else { utm10x <- substr(UTMcode, nc - 1, nc - 1) # penultimate digit of UTMcode utm10y <- substr(UTMcode, nc, nc) # last digit of UTMcode utm10index <- 0 : 9 if (size == 20) upscaled.index <- rep(letters[1 : 5], each = 2) else if (size == 50) upscaled.index <- rep(LETTERS[1 : 2], each = 5) n <- length(UTMcode) upscaled.x <- upscaled.y <- vector("integer", n) for (i in 1 : n) { x <- which(utm10index == utm10x[i]) y <- which(utm10index == utm10y[i]) upscaled.x[i] <- upscaled.index[x] upscaled.y[i] <- upscaled.index[y] } # end for i upscaled.code <- paste(utm10letters, upscaled.x, upscaled.y, sep = "") } # end if size 100 else return(upscaled.code) } # end UTM10upscale function
Note that the resulting codes for 20×20 and for 50×50 km cells (namely the last two characters) are not “official” UTM codes, just ones that I made up. I used letters instead of numbers, with lower case for 20-km and upper case for 50-km cells, so that these codes cannot be confused with the UTM 10×10 km codes.
Then you just have to add a column with the new codes to your map’s table of attributes, and use e.g. a spatial R package or a GIS to dissolve the UTM 10 x 10 km cells using the values in this column. You can also use R’s aggregate function to summarize your data into the upscaled cells.
mydata$utm20 <- utm10upscale(mydata$utm10, size = 20) mydata$utm50 <- utm10upscale(mydata$utm10, size = 50)