在R中创建空间数据 [英] Create Spatial Data in R
本文介绍了在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屋!
查看全文