从 R 中的空间点数据中每隔一行和一列删除一次

问题描述

我已将栅格转换为 R 中的点矩阵。该文件有 3 列,x(经度)、y(纬度)和 v(像素值)-我现在希望通过 x 和每个如图像左上角所示,y 的第二行但不知道如何执行此操作。这个想法是在没有任何插值或重采样的情况下对数据进行细化。

可以在此处访问所示的示例数据:https://drive.google.com/file/d/1XGEPsPEyrVNLEcZy-C6ES5915kWIaqGz/view?usp=sharing

enter image description here

解决方法

在询问 R 问题时,请始终包含一个最小可重现的、自包含的示例,即显示一些代码而不依赖于必须下载的文件。

当您开始使用栅格数据时,在创建点之前操作栅格数据可能是最简单的。

使用 raster 包:

示例数据

library(raster)
r <- raster(nrow=20,ncol=20,xmn=0,xmx=1,ymn=0,ymx=1,crs="+proj=utm +zone=1 +datum=WGS84")
values(r) <- 1:ncell(r)

p <- rasterToPoints(r)
plot(r)
points(p,cex=.5)

解决方案

i <- seq(1,nrow(r),2)
j <- seq(1,ncol(r),2)
r[i,] <- NA
r[,j] <- NA
pp <- rasterToPoints(r)
points(pp,pch=20,cex=2)

或者使用 terra 包:

library(terra)
r <- rast(nrow=20,xmin=0,xmax=1,ymin=0,ymax=1,crs="+proj=utm +zone=1 +datum=WGS84")
values(r) <- 1:ncell(r)
p <- as.points(r)

plot(r)
points(p,cex=.5)

i <- seq(1,j] <- NA
pp <- as.points(r)

points(pp,cex=2)

enter image description here

,

这行得通吗?如果没有可重现的示例和所需的输出,很难知道要操作什么,但这应该从矩阵中删除偶数行和列。

library(dplyr)
matrix(1:100,nrow = 10) %>%
  as.data.frame() %>%
  filter(row_number() %% 2 != 0) %>%
  select(seq(1,ncol(.),2)) %>%
  as.matrix()