1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
"spmap.to.lev" <- function (data, zcol = 1:n, n = 2, names.attr)
{
if (!(is(data, "SpatialPointsDataFrame") || (is(data, "SpatialGridDataFrame"))))
stop("data is not of a class that extends SpatialPointsDataFrame")
if (dimensions(data) > 2) {
warning("spmap.to.lev ignores spatial dimensions beyond the first 2")
cc = coordinates(data)[,1:2]
data = as(data, "data.frame")
coordinates(data) = cc
}
coord.names = dimnames(data@coords)[[2]]
if (missing(names.attr)) {
if (is.character(zcol))
names.attr = zcol
else {
names.attr = names(data)[zcol]
zcol = names.attr
}
} else {
if (length(names.attr) != length(zcol))
stop("length names.attr should match length of zcol")
if (!is.character(zcol))
zcol = names(data)[zcol]
}
data = stack(as(data, "SpatialPointsDataFrame"), zcol) # replace with data.frame
#data$ind = factor(as.character(data$ind), levels = zcol, labels = names.attr)
# Arien Lam suggested:
#data$ind = factor(data$ind, levels = unique(data$ind), labels = names.attr)
# better (as it avoids unique()) is:
data$ind = factor(data$ind, levels = zcol, labels = names.attr)
names(data) = c(coord.names, "z", "name")
data
}
stack.SpatialPointsDataFrame = function (x, select, ...)
{
lev = NULL
xd = x@data
cc = coordinates(x)
cc.names = dimnames(cc)[[2]]
if (!missing(select))
xd = xd[select]
if (is.factor(xd[[1]])) {
lev = levels(xd[[1]])
if (length(xd) > 1)
for (i in 2:length(xd))
if (!identical(lev, levels(xd[[i]])))
stop("all factors should have identical levels")
}
nc = ncol(xd)
xd = stack(data.frame(lapply(xd, as.numeric)))
if (!is.null(lev))
xd[[1]] = factor(lev[xd[[1]]], levels = lev)
ccr = data.frame(rep(cc[,1], nc))
for (i in 2:ncol(cc))
ccr = data.frame(ccr, rep(cc[,i], nc))
names(ccr) = cc.names
data.frame(ccr, xd)
}
stack.SpatialGridDataFrame = function (x, select, ...)
stack(as(x, "SpatialPointsDataFrame"), select, ...)
stack.SpatialPixelsDataFrame = function (x, select, ...)
stack(as(x, "SpatialPointsDataFrame"), select, ...)
|