使用行/列索引对栅格数据进行子集提取

3

当对矩阵或DF进行子集操作时,可以引用行列,例如df1[1:5, 3:10]df3[2:4, ]

是否有办法在栅格中完成这个操作? 比如,我可以从一个栅格对象中裁剪只有500:700行的部分吗?

我尝试使用rasterFromCells(),但它没有给我想要的结果(考虑到 R 的其他巧妙子集方法,似乎应该有更简单的解决方案)。

示例:

r <- raster(ncols = 50, nrow = 50)
r[] <- 1:ncell(r)

# I would like to subset the bottom 50 rows of cells, but keep it as a raster.
# However, this returns a numeric object.
rSub <- r[30:50, 1:50]  

谢谢!

请添加一个最小可重现的示例! - Daniel Winkler
你需要单元格的值本身还是另一个栅格对象? - JmeCS
对不起,我添加了一个小例子。我想将其保持为光栅对象。 - gvan
这对我来说并不够清晰。使用 r[30:50, 1:50],你是在对最后20行进行子集化,是吗? - Seymour
2个回答

10

我觉得问题表述不够清晰。

但是,你是想找这个吗?

subR <- crop(r, extent(r, 30, 50, 1, 50))

plot(subR)

raster包的crop()函数可以做到这一点,因为它允许您使用行和列对栅格对象进行子集划分。


这正是我一直在寻找的。当我最初在栅格文档中阅读时,我认为“extent”是指空间范围。对于问题质量不佳,再次感谢。 - gvan
我非常确定你也可以使用空间坐标来进行“裁剪”。 - Seymour
1
请注意 extent(r, 30, 50, 1, 50)) 返回一个空间范围。 - Robert Hijmans
如果这是您问题的答案,您应该验证它。 - Seymour

4

我更喜欢像西摩一样使用裁剪。还有另一种方法,使用drop=FALSE

library(raster)
r <- raster(ncols = 10, nrow = 10)
values(r) <- 1:ncell(r)

rSub <- r[3:5, 2:3, drop=FALSE] 
rSub
#class       : RasterLayer 
#dimensions  : 3, 2, 6  (nrow, ncol, ncell)
#resolution  : 36, 18  (x, y)
#extent      : -144, -72, 0, 54  (xmin, xmax, ymin, ymax)
#coord. ref. : +proj=longlat +datum=WGS84 +ellps=WGS84 +towgs84=0,0,0 
#source      : memory
#names       : layer 
#values      : 22, 43  (min, max)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接