问题描述
我已将栅格转换为 R 中的点矩阵。该文件有 3 列,x(经度)、y(纬度)和 v(像素值)-我现在希望通过 x 和每个如图像左上角所示,y 的第二行但不知道如何执行此操作。这个想法是在没有任何插值或重采样的情况下对数据进行细化。
可以在此处访问所示的示例数据:https://drive.google.com/file/d/1XGEPsPEyrVNLEcZy-C6ES5915kWIaqGz/view?usp=sharing
解决方法
在询问 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)
,
这行得通吗?如果没有可重现的示例和所需的输出,很难知道要操作什么,但这应该从矩阵中删除偶数行和列。
library(dplyr)
matrix(1:100,nrow = 10) %>%
as.data.frame() %>%
filter(row_number() %% 2 != 0) %>%
select(seq(1,ncol(.),2)) %>%
as.matrix()