Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何根据概率将栅格样本分为三类,并在R中设置这些类别的值?_R_Random_Raster - Fatal编程技术网

如何根据概率将栅格样本分为三类,并在R中设置这些类别的值?

如何根据概率将栅格样本分为三类,并在R中设置这些类别的值?,r,random,raster,R,Random,Raster,抱歉我的问题太麻烦了。我要做的是生成一个光栅,其中随机1%的图层像素有值,在这些值像素中,随机35%有值1,55%有值2,10%有值3。其余像素应采用R NA中的“无数据”标记 使用以下代码,使用1%的像素创建具有统一值的光栅非常简单: pixels <- raster(ext = extent(-120, -119, 49, 50), resolution = c(0.001, 0.001), crs = CRS("+proj=longlat +datum=WGS84"), vals =

抱歉我的问题太麻烦了。我要做的是生成一个光栅,其中随机1%的图层像素有值,在这些值像素中,随机35%有值1,55%有值2,10%有值3。其余像素应采用R NA中的“无数据”标记

使用以下代码,使用1%的像素创建具有统一值的光栅非常简单:

pixels <- raster(ext = extent(-120, -119, 49, 50), resolution = c(0.001, 0.001), crs = CRS("+proj=longlat +datum=WGS84"), vals = 1)

testing <- sampleRandom(pixels, size = as.integer(0.01*ncell(pixels)), asRaster = TRUE)
但是,我不确定如何将测试的有值像素划分为三个类别,并根据上述内容设置这些类别的值


这是可能的,还是另一种实现我所追求的目标的方式?

不太麻烦

函数f取单元格的总数

f <- function(N) {
    n <- N/100  # 1% sample
    # create a vector with the values you want
    v <- c(rep(1, 0.35*n), rep(2, 0.55*n), rep(3, 0.1*n))
    # sample these values (that is, put them in random order)
    v <- sample(v)
    # create output vector 
    out <- rep(NA, N)
    # put the values in random places
    out[sample(N, length(v))] <- v
    out
}

library(raster)
# create a RasterLayer
r <- raster(ncol=100, nrow=100)
set.seed(10) # for reproducibility
values(r) <- f(ncell(r))
另一种方法是对样本使用概率

set.seed(10) 
N <- ncell(r)
v <- sample(3, N/100, prob=c(0.35, 0.55, 0.1), replace=TRUE)
table(v)
# 1  2  3 
#30 67  3 
但因为它使用概率,所以比例并不精确。在这种情况下,这似乎很遥远,但这是因为样本量小

按照你的例子,你也可以沿着这条路线走

library(raster)
r <- raster(ext=extent(-120, -119, 49, 50), resolution=c(0.001, 0.001), crs="+proj=longlat +datum=WGS84", vals = 1)
r <- sampleRandom(r, size = (0.01*ncell(r)), asRaster = TRUE)

sfun <- function(x) {
   i <- !is.na(x)
   x[i] <- sample(1:3, sum(i), prob=c(0.35, 0.55, 0.1), replace=TRUE)
   x
}

set.seed(101)
x <- calc(r, sfun)
再次大致正确

tab <- table(values(x))
100 * tab / sum(tab)
#   1     2     3 
#35.45 54.62  9.93
tab <- table(values(x))
100 * tab / sum(tab)
#   1     2     3 
#35.45 54.62  9.93