【问题标题】:Delete every second row and column from spatial point data in R从R中的空间点数据中删除每隔一行和一列
【发布时间】:2021-06-07 15:57:14
【问题描述】:

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

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

【问题讨论】:

    标签: r r-raster resampling


    【解决方案1】:

    当问一个 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 package:

    library(terra)
    r <- rast(nrow=20, ncol=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, nrow(r), 2)
    j <- seq(1, ncol(r), 2)
    r[i,] <- NA
    r[, j] <- NA
    pp <- as.points(r)
    
    points(pp, pch=20, cex=2)
    

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 不幸的是不是,我认为这是因为我正在处理空间数据,而是在这里作为数据框。它在矩阵上做了技巧并删除了第二列,但那是我的 y 列。我认为这需要被视为空间数据集,以便按图像所示的 x (lon) 和 y (lat) 删除。我添加了一个指向示例数据集的链接,也许这会有所帮助。非常感谢您的代码!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-01-09
      • 1970-01-01
      相关资源
      最近更新 更多