在R中创建空间数据 [英] Create Spatial Data in R

查看:21
本文介绍了在R中创建空间数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个100x200米区域内物种及其大致位置的数据集。数据框的位置部分不是我认为可用的格式。在这个100x200米的矩形中,有两个名为A到CV的10x10米正方形。在每个10x10正方形内有四个5x5米的正方形,分别命名为1、2、3和4(1在2的南边,3.4的西边,4的东边,3的北边)。我想让R知道,A是在(0,0)、(10,0)、(0,0)和(0,10)处有角的正方形,B就在A的北边,有角(0,10)、(0,20)、(10,10)和(10,20),K就在A的东边,在(10,0)、(10,10)、(20,0)和(20,10)处有角,依此类推。此外,我想让R知道每个5x5米的正方形在100x200米的地块中的什么位置。

因此,我的数据框如下所示

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
最终,我希望能够绘制100x200米的区域,并让每个10x10平方米的面积显示树木的数量、物种的数量或总生物量 将我拥有的数据转换为空间数据的最佳方法是什么,以便R可以用来绘制图表,甚至进行分析?

推荐答案

开始。

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

转换(例如){"J",3}到相应子正方形中心的函数。

convpos <- function(pos10,pos5) {
    ## convert letters to major (x,y) positions
    p1 <- as.numeric(factor(pos10,levels=tags10))  ## or use match()
    p1.x <- ((p1-1) %% 10) *10+5    ## %% is modulo operator
    p1.y <- ((p1-1) %/% 10)*10+5    ## %/% is integer division
    ## sort out sub-positions
    p2.x <- ifelse(pos5 <=2,2.5,7.5)   ## {1,2} vs {3,4} values
    p2.y <- ifelse(pos5 %%2 ==1 ,2.5,7.5)  ## odd {1,3} vs even {2,4} values
    c(p1.x+p2.x,p1.y+p2.y)
}

用法:

convpos("J",2)
convpos(mydata$tenbytenpos,mydata$fivebyfivepos)

重要说明:

  • 这是一个概念证明,我几乎可以保证我没有把x和y坐标的对应弄得很正确。但您应该能够逐行跟踪并查看它在做什么...
  • 它应该可以在向量上正常工作(参见上面的第二个用法示例):为此,我从switch切换到ifelse
  • 将数据读入R时,您的列名(10x10)可能会被修改为类似X10.10的内容:请参阅?data.frame?check.names

这篇关于在R中创建空间数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆