在 R 中按 'most frequent' 栅格化点
Rasterize points by 'most frequent' in R
我有一系列空间数据点,我想使用 R 函数栅格化将其转换为栅格。我想要表示的数据是一个因子值,所以我想表示每个栅格像元中出现频率最高的值。
我试过写一个函数来获取模式,但是失败了。
getmode <- function(v) {
uniqv <- unique(v)
uniqv[which.max(tabulate(match(v, uniqv)))]
}
#run rasterize
test <- rasterize(best, rast, best$val, fun = getmode)
导致此错误:
Error in FUN(X[[i]], ...) : unused argument (na.rm = na.rm)
这是一个最小的独立可复制示例:
library(raster)
r <- raster(ncols=20, nrows=10)
n <- 1000
set.seed(123)
x <- runif(n) * 360 - 180
y <- runif(n) * 180 - 90
xy <- cbind(x, y)
v <- sample(10, n, replace=TRUE)
现在将 ...
添加到您的函数中(请参阅 ?rasterize
中 fun
下的文档条目):
getmode <- function(v, ...) {
uniqv <- unique(v)
uniqv[which.max(tabulate(match(v, uniqv)))]
}
并使用它:
m <- rasterize(xy, r, v, getmode)
我有一系列空间数据点,我想使用 R 函数栅格化将其转换为栅格。我想要表示的数据是一个因子值,所以我想表示每个栅格像元中出现频率最高的值。
我试过写一个函数来获取模式,但是失败了。
getmode <- function(v) {
uniqv <- unique(v)
uniqv[which.max(tabulate(match(v, uniqv)))]
}
#run rasterize
test <- rasterize(best, rast, best$val, fun = getmode)
导致此错误:
Error in FUN(X[[i]], ...) : unused argument (na.rm = na.rm)
这是一个最小的独立可复制示例:
library(raster)
r <- raster(ncols=20, nrows=10)
n <- 1000
set.seed(123)
x <- runif(n) * 360 - 180
y <- runif(n) * 180 - 90
xy <- cbind(x, y)
v <- sample(10, n, replace=TRUE)
现在将 ...
添加到您的函数中(请参阅 ?rasterize
中 fun
下的文档条目):
getmode <- function(v, ...) {
uniqv <- unique(v)
uniqv[which.max(tabulate(match(v, uniqv)))]
}
并使用它:
m <- rasterize(xy, r, v, getmode)