gpt4 book ai didi

r - 在 R 中创建空间数据

转载 作者:行者123 更新时间:2023-12-01 23:02:53 25 4
gpt4 key购买 nike

我有一个物种数据集及其在 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,0)、(10,10)、(20, 0) 和 (20,10),依此类推,适用于所有 10 x 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]))

要转换的函数(例如) {"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出于这个原因
  • 您的列名 ( 10x10 ) 可能会被混淆成类似 X10.10 的内容将数据读入 R 时:参见 ?data.frame?check.names
  • 关于r - 在 R 中创建空间数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12117113/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com