为了分配一定数量的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
分配[,2]
作为[,1]
的最高值的函数,而不用更改{{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
图层,因此基于栅格的解决方案也适用于我。
答案 0 :(得分:1)
您可以通过对第2列求和来找到您有多少1
。然后,您可以通过检查第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
此过程中没有绑定处理。
答案 1 :(得分:0)
我认为你想要的是这样的:
Example[,2]<-ifelse(Example[,1]>=0.5,1,0)
但是,我只是猜测如果列大于或等于0.5,则希望列为1,否则为0。
但也许你想要第二列是第一列的顺序。这有点令人困惑:
Example[,2]<-Example[order(Example[,1]),2]