点数据存在缺失数据

时间:2015-11-10 07:26:31

标签: r raster

请真的需要你的帮助。 我有一个点数据(Lon和Lat),我想从中创建存在缺失数据。我怎么能在R中这样做? 实施例

             species        lon   lat
Oncorhynchus_kisutch    -130.25 55.75
Oncorhynchus_kisutch    -129.75 55.75
Oncorhynchus_kisutch    -130.25 55.25
Oncorhynchus_kisutch    -129.75 55.25
Oncorhynchus_kisutch    -129.25 55.25
Oncorhynchus_kisutch    -133.25 54.75
Oncorhynchus_kisutch    -131.75 54.75
Oncorhynchus_kisutch    -131.25 54.75

我希望点数据如下所示;

LAT: -90:0.25:90 ---> vector LAT 720
LON: -180: 0.25:180 ----> vector LON 1440

 Cell no   PAS
      1      0
      2      0
      3      0
      4      1
      5      0
      6      1
      7      0
      8      0
      9      0
      .
      .
      .
1039680      1

这是720 Lat和1440 Lon。

1 个答案:

答案 0 :(得分:1)

可能有一种更简单的方法,但我做了以下几点:

  1. 创建已知分辨率的网格
  2. 查询lon / lat匹配并使其存在= 1表示匹配
  3. (可选)转换为矩阵

    # Load data
    df <- read.table(text=
    "species        lon   lat
    Oncorhynchus_kisutch    -130.25 55.75
    Oncorhynchus_kisutch    -129.75 55.75
    Oncorhynchus_kisutch    -130.25 55.25
    Oncorhynchus_kisutch    -129.75 55.25
    Oncorhynchus_kisutch    -129.25 55.25
    Oncorhynchus_kisutch    -133.25 54.75
    Oncorhynchus_kisutch    -131.75 54.75
    Oncorhynchus_kisutch    -131.25 54.75
    ",
    header=TRUE
    )
    head(df)
    
     # create grid
    reso = 0.25
    xs <- seq(-180, 180, by=reso)
    ys <- seq(-90, 90, by=reso)
    grd <- expand.grid(
      x=xs,
      y=ys,
      presence=0
    )
    head(grd)
    
    # query
    for(i in seq(nrow(df))){
      tmp <- which(df$lon[i] == grd$x & df$lat[i] == grd$y)
      if(length(tmp)>0){
        grd$presence[tmp] <- 1
      }
    }
    
    png("plot.png", width=5, height=5, units="in", res=600, type="cairo")
    plot(grd$x, grd$y, pch=1, cex=1, col=c(NA, 1)[grd$presence+1], lwd=0.5)
    dev.off()
    

    enter image description here

    mat <- list(x=xs, y=ys, z=matrix(grd$presence, nrow=length(xs), ncol=length(ys)))
    png("mat.png", width=5, height=5, units="in", res=600, type="cairo")
    image(mat, useRaster=TRUE, col=c(NA, 1))
    dev.off()
    
  4. 如果你放大矩阵,你会看到黑色的存在网格。