R 如何在光栅中选择具有特定值的像素?

R 如何在光栅中选择具有特定值的像素?,r,spatial,raster,pixels,r-raster,R,Spatial,Raster,Pixels,R Raster,我希望其他地方没有问过同样的问题,因为,即使这是一个基本练习,我也无法在其他问题中找到它 我有一个光栅,从矢量的光栅化得到;在该光栅中,对应于多边形的像素被分配了一个编号,例如,属于多边形a的所有像素被分配了编号53;属于多边形H的像素被分配了编号102。请注意,原始向量中的多边形没有ID代码,因此,多边形A或H是我现在发明的。 这是我得到的光栅的结构: > structure(lodi_C00) class : RasterLayer dimensions : 1994,

我希望其他地方没有问过同样的问题,因为,即使这是一个基本练习,我也无法在其他问题中找到它

我有一个光栅,从矢量的光栅化得到;在该光栅中,对应于多边形的像素被分配了一个编号,例如,属于多边形a的所有像素被分配了编号53;属于多边形H的像素被分配了编号102。请注意,原始向量中的多边形没有ID代码,因此,多边形A或H是我现在发明的。 这是我得到的光栅的结构:

> structure(lodi_C00)
class       : RasterLayer 
dimensions  : 1994, 1932, 3852408  (nrow, ncol, ncell)
resolution  : 30, 30  (x, y)
extent      : 516000, 573960, 4990200, 5050020  (xmin, xmax, ymin, ymax)
coord. ref. : +proj=utm +zone=32 +datum=WGS84 +units=m +no_defs +ellps=WGS84 +towgs84=0,0,0 
data source : C:\Users\Laura\Desktop\MSc thesis\Dati\3_Segmentation\Lodi_segmented\lodi_single_classes_rasterized\lodiC00.tif 
names       : lodiC00 
values      : 1, 152  (min, max)
attributes  :
        ID   category
 from:   0           
 to  : 152 M158200079
现在我只需要从这个光栅中选择对应于某些多边形的像素,这样就可以选择具有特定值的像素。我有一个要选择的像素值列表,有106个值:

> C00_trainingrows
  [1] 152  62  74  40 102  36  14  78  79  31  35  12   9 137   7   8  43 101  52 133  59 123  23  28  49  93  11  63  72 125   1  69  86
 [34] 100 112 145 128 135  32  99  34  44  61  66  47  50 131 129  95 108  76  38 109  39  64  37  53 122  57  21  55 111 113  33  91  77
 [67] 132  51  88  10  13 107  24  65 105  60  87  71 147 149  17 139  25 120 124 114  27  45 103   6  84  29 144 141  22  26   5  16  75
[100]   2  41  42 126 118  54 110
因此,我想要一个新的光栅,其中只保留值为152、62等的像素

我知道,当仅选择一个值(例如152)时,此选项有效:

lodi_C00_training <- lodi_C00 == 152
writeRaster(lodi_C00_training, "lodi_C00_training", format="GTiff", progress="text", overwrite=TRUE)

但是,我需要所有的106个值。有什么建议吗?

如果您的光栅不是太大,您可以尝试以下方法:

#Dummy data start
lodi_C00          <- raster(matrix(1:9))
C00_trainingrows  <- c(1,5,9)

#copy your raster
lodi_C00_training <- lodi_C00

#set all pixels that are not contained in your vector to NA
lodi_C00_training[!(lodi_C00[] %in% C00_trainingrows)] <- NA
评论后编辑:

您可以尝试以下方法:

#define function 
#(setting C00_trainingsrows as a fixed paramater might not be the best practice)

selectPixels <- function(x) {
if(!is.na(x)) { 
  if(!(x %in% C00_trainingrows)){
    x <- NA
  }
} 
return(x)
}


 #Set up a cluster with two cores
 beginCluster(2)
 lodi_C00_training <- clusterR(lodi_C00, 
                                fun=calc,
                                args=list(fun=selectPixels),
                                export='C00_trainingrows')
 endCluster()

@LeDYoM,这不是我的家庭作业。但即使是,有什么问题吗?无论如何,这是一个我自己无法解决的问题,为此我向更有经验的程序员寻求帮助。当然,但请你在问题中更具体一些,调整标记,以便该领域的专家能够前来解决answer@LeDYoM,我添加了标签空间和地理空间,我希望这能改进我的帖子。我愿意接受任何其他建议,我对这个论坛比较陌生,所以我可能会错过一些重要的标签…对不起,但是你正在使用的语言或技术将是一个很好的开始。如果在HANF之前过滤你的输入多边形,只保留你感兴趣的多边形,不是更有效吗,然后光栅化这些?我已经想到了这一点,但不幸的是,我的光栅相当大><我实际上需要在33个光栅上做这件事,每13个类需要花费不合理的时间….@LauraPaladini我编辑了我的答案。希望对你有用。