2

raster我使用 R 的raster包和sampleStratified函数从层中取出分层随机样本:

library(raster)
r<-raster(nrows=5, ncols=5)
r[]<-c(1,0,0,0,1,1,0,1,0,0,1,0,1,0,1,1,1,0,1,0,0,0,1,1,1)


#Stratified random sample size
sampleStratified(r, size=5)
      cell layer
 [1,]    3     0
 [2,]   22     0
 [3,]    7     0
 [4,]   21     0
 [5,]   12     0
 [6,]   13     1
 [7,]   17     1
 [8,]   11     1
 [9,]    8     1
[10,]   23     1

我现在想做的是按第一列排序样本,对第一列进行插值以获得栅格的原始长度,并用 NA 填充第二列的缺失值,如下所示:

   [,1] [,2]
 [1,]    1   NA
 [2,]    2   NA
 [3,]    3    0
 [4,]    4   NA
 [5,]    5   NA
 [6,]    6   NA
 [7,]    7    0
 [8,]    8    1
 [9,]    9   NA
[10,]   10   NA
[11,]   11    1
[12,]   12    0
[13,]   13    1
[14,]   14   NA
[15,]   15   NA
[16,]   16   NA
[17,]   17    1
[18,]   18   NA
[19,]   19   NA
[20,]   20   NA
[21,]   21    0
[22,]   22    0
[23,]   23    1
[24,]   24   NA
[25,]   25   NA

我尝试了使用包中的approxTime功能,simecol但在填充 NA 时失败了。我有 10 个栅格图层,每个图层约有 500,000 个值,因此非常感谢快速方法。

4

2 回答 2

1

我会merge按照@Roland 的建议使用。

mm <- data.frame(col1 = sample(1:100, 50), col2 = sample(0:1, 50, replace = TRUE))
mm <- as.matrix(mm[order(mm[, 1]), ])
mdl <- as.matrix(data.frame(col1 = 1:100, col2 = NA))
merge(mdl, mm, by = "col1", all.x = TRUE)

    col1 col2.x col2.y
1      1     NA     NA
2      2     NA      0
3      3     NA      0
4      4     NA     NA
5      5     NA     NA
6      6     NA     NA
7      7     NA      0
8      8     NA      1
9      9     NA     NA
10    10     NA      0
11    11     NA     NA
12    12     NA      0
13    13     NA      1
于 2013-10-09T08:58:59.937 回答
1

我会以相反的方式考虑它。您已经知道要更改的单元格是那些不在随机样本中的单元格,而不是可能很昂贵的插值。因此,将您的随机样本用作您不想更改的单元格编号的索引向量,只需[<-那些未出现在分层样本中的单元格索引使用替换方法。我们将raster方法用于基本函数[<-and%in%和 also seq_len。原谅稍微冗长的例子,更好地展示步骤。应该很快,我认为 500,000 个单元格的栅格不会有任何问题......

# For reproducible example
set.seed(1)

#  Get stratified random sample
ids <- sampleStratified(r, size=5)

#  Copy of original raster (to visualise difference)
r2 <- r

# Get set of cell indices
cell_no <- seq_len(ncell(r2)) 

# Those indices to replace are those not in the random sample
repl <- cell_no[ ! cell_no %in% ids[,1] ]

#  Replace cells not in sample with NA
r2[ repl ] <- NA

# Plot to show what is going on
par( mfrow = c(1,2))
plot(r)
plot(r2)

在此处输入图像描述

于 2013-10-09T09:22:03.237 回答