在R中创建空间数据

在R中创建空间数据,r,spatial,R,Spatial,我有一个100 x 200米区域内物种及其大致位置的数据集。数据帧的位置部分不是我认为可用的格式。在这个100 x 200米的矩形中,有200个10 x 10米的正方形,命名为A到CV。在每个10 x 10的正方形内有四个5 x 5米的正方形,分别命名为1、2、3和4(1位于2的南部,3的西部。4位于2的东部,3的北部)。我想让R知道A是角在(0,0)、(10,0)、(0,0)和(0,10)的正方形,B在A的正北方,有角(0,10)、(0,20)、(10,10)和(10,20),K在A的正东方,

我有一个100 x 200米区域内物种及其大致位置的数据集。数据帧的位置部分不是我认为可用的格式。在这个100 x 200米的矩形中,有200个10 x 10米的正方形,命名为A到CV。在每个10 x 10的正方形内有四个5 x 5米的正方形,分别命名为1、2、3和4(1位于2的南部,3的西部。4位于2的东部,3的北部)。我想让R知道A是角在(0,0)、(10,0)、(0,0)和(0,10)的正方形,B在A的正北方,有角(0,10)、(0,20)、(10,10)和(10,20),K在A的正东方,所有10 x 10米的正方形都有角在(10,0)、(10,10)、(20,0)和(20,10)等等。此外,我想让R知道每个5 x 5米的正方形在100 x 200米的地块中的位置

所以,我的数据框看起来像这样

10x10    5x5     Tree    Diameter
A    1     tree1    4
B    1     tree2    4
C    4     tree3    6
D    3     tree4    2
E    3     tree5    3
F    2     tree6    7
G    1     tree7    12
H    2     tree8    1
I    2     tree9    2
J    3     tree10   8
K    4     tree11   3
L    1     tree12   7
M    2     tree13   5
最终,我希望能够绘制100 x 200米的区域,并让每个10 x 10米的正方形显示树木数量、物种数量或总生物量 将我拥有的数据转换为R可用于绘图和分析的空间数据的最佳方法是什么?

这里是一个开始

## set up a vector of all 10x10 position tags
tags10 <- c(LETTERS,
            paste0("A",LETTERS),
            paste0("B",LETTERS),
            paste0("C",LETTERS[1:22]))
用法:

convpos("J",2)
convpos(mydata$tenbytenpos,mydata$fivebyfivepos)
重要提示:

  • 这是一个概念证明,我可以保证我没有得到x和y坐标的对应关系。但是你应该能够一行一行地追踪,看看它在做什么
  • 它应该在向量上正常工作(参见上面的第二个使用示例):出于这个原因,我从
    switch
    切换到
    ifelse
  • 当将数据读入R时,列名(
    10x10
    )可能会被弄乱成类似
    X10.10
    的东西:请参见
    ?data.frame
    ?check.names

与@Ben Bolker所做的类似,这里有一个查找功能(尽管您可能需要转置一些内容,以使标签与您描述的内容匹配)


顺便说一下,我对你所在区域的几何结构有点困惑。您有100个10x10的绘图(A到CV),显然是按10行排列的——这不就是100x100而不是100x200区域吗?(你在上面一点也把它称为“正方形”)我正在打电话,对此很抱歉。现在修好了。我现在正在努力使代码适应我的实际数据,因为这有点像一个抽象。非常感谢你的帮助。这是解决这个问题的聪明方法。太好了。它可以很好地处理向量a输入。要得到两个向量,一个是x坐标,另一个是y坐标,您可以编写
x.coords
convpos("J",2)
convpos(mydata$tenbytenpos,mydata$fivebyfivepos)
tenbyten <- c(LETTERS[1:26], 
  paste0("A",LETTERS[1:26]), 
  paste0("B",LETTERS[1:26]), 
  paste0("C",LETTERS[1:22]))

tenbyten <- matrix(rep(tenbyten, each = 2), ncol = 10)
tenbyten <- t(apply(tenbyten, 1, function(x){rep(x, each = 2)}))
# the 1234 squares
squares <- matrix(c(rep(c(1,2),10),rep(c(4,3),10)), nrow = 20, ncol = 20)
# stick together into a reference grid
my.grid <- matrix(paste(tenbyten, squares, sep = "-"), nrow = 20, ncol = 20)

# a lookup function for the site grid
coordLookup <- function(tbt, fbf, .my.grid = my.grid){
  x <- col(.my.grid) * 5 - 2.5
  y <- row(.my.grid) * 5 - 2.5
  marker <- .my.grid == paste(tbt, fbf, sep = "-")
  list(x = x[marker], y = y[marker])
}

coordLookup("BB",2)
$x
[1] 52.5

$y
[1] 37.5
library(sp)
# really you have a 20x20 grid, counting the small ones.
# c(2.5,2.5) specifies the distance in any direction from the cell center
grd <- GridTopology(c(1,1), c(2.5,2.5), c(20,20)))
grd <- as.SpatialPolygons.GridTopology(grd)
# get centroids
coords <- coordinates(polys)
# make SPDF, with an extra column for your grid codes, taken from the above.
# you can add further columns to this data.frame(), using polys@data
polys <- SpatialPolygonsDataFrame(grd, 
  data=data.frame(x=coords[,1], y=coords[,2], my.ID = as.vector(my.grid), 
  row.names=getSpPPolygonsIDSlots(grd)))