1

TRUE为了根据层的值分配一定数量的(=1)值raster,我想做这样的事情:

假设我有一个 9x2 矩阵,如下所示:

Example <- matrix(c(0.8,0.6,0.5,0.3,0.2,0.4,0.9,0.7,
                0.1,1,1,1,1,1,0,0,0,0),ncol=2)

     > Example
      [,1] [,2]
 [1,]  0.8    1
 [2,]  0.6    1
 [3,]  0.5    1
 [4,]  0.3    1
 [5,]  0.2    1
 [6,]  0.4    0
 [7,]  0.9    0
 [8,]  0.7    0
 [9,]  0.1    0

现在我想根据的最高值分配1's from而不改变 的顺序。结果应如下所示:[,2][,1] [,1]

> Example
      [,1] [,2]
 [1,]  0.8    1
 [2,]  0.6    1
 [3,]  0.5    1
 [4,]  0.3    0
 [5,]  0.2    0
 [6,]  0.4    0
 [7,]  0.9    1
 [8,]  0.7    1
 [9,]  0.1    0

有什么优雅的方法可以做到这一点。我找不到任何功能来解决这个问题。由于我想使用包转换[,2]raster图层,因此raster基于栅格的解决方案也适用于我。

4

2 回答 2

1

您可以通过对第 2 列求和来找到您有多少1个。然后您可以通过检查它是否高于或低于该值来找到第 1 列的相对阈值。

how.many.ones <- sum(Example[, 2])

max.thresh <- sort(Example[, 1], decreasing=TRUE)[how.many.ones]

change.to.one <- Example[, 1] >= max.thresh

Example[, 2] <- ifelse(change.to.one, 1, 0)

结果:

Example

      [,1] [,2]
 [1,]  0.8    1
 [2,]  0.6    1
 [3,]  0.5    1
 [4,]  0.3    0
 [5,]  0.2    0
 [6,]  0.4    0
 [7,]  0.9    1
 [8,]  0.7    1
 [9,]  0.1    0


警告:

在这个过程中没有平局处理。

于 2013-07-02T14:14:24.537 回答
0

我认为你想要的是这样的:

Example[,2]<-ifelse(Example[,1]>=0.5,1,0)

但是,我只是猜测您希望该列大于或等于 0.5 时为 1,否则为 0。

但也许你希望第二列是第一列的顺序。这有点令人困惑:

Example[,2]<-Example[order(Example[,1]),2]
于 2013-07-02T14:11:23.263 回答