如何根据R中的网格索引坐标数据?
我的坐标数据(x坐标和y坐标)的比例介于: Xpos:27-1367nm,Ypos:67-1014nm。数据集由大约2500-3500个数据点组成。 以下是此类数据集的标题:如何根据R中的网格索引坐标数据?,r,indexing,grid,coordinates,partitioning,R,Indexing,Grid,Coordinates,Partitioning,我的坐标数据(x坐标和y坐标)的比例介于: Xpos:27-1367nm,Ypos:67-1014nm。数据集由大约2500-3500个数据点组成。 以下是此类数据集的标题: XPos YPos 1 29 211 2 31 609 3 33 1001 4 35 508 5 37 424 6 39 584 7 40 378 8 41 204 9 41 444 10 41 872 ... [![绘制数据][1][1
XPos YPos
1 29 211
2 31 609
3 33 1001
4 35 508
5 37 424
6 39 584
7 40 378
8 41 204
9 41 444
10 41 872
...
[![绘制数据][1][1]
现在,我想通过在R中的数据上应用由大小相等的象限组成的网格来索引数据点。结果应该是一个新列“grid_index”,其中包含数据点所在的唯一象限ID(见图)。有没有一个简单的方法可以做到这一点?我想尝试不同的网格单元大小来划分数据,例如大小为50nm、100nm、200nm或400nm的象限和大小为100nm x 200nm或50nm x100nm的矩形
[![Grid for data pint indexing][2]][2]
[![每个网格象限应具有唯一的ID][3]][3]
我将非常感谢您的帮助。这里有一个使用
findInterval
的方法:
首先建立一个具有适当数量索引的矩阵:
pos.matrix <- matrix(1:35,byrow = TRUE, nrow = 5)
pos.matrix
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 1 2 3 4 5 6 7
[2,] 8 9 10 11 12 13 14
[3,] 15 16 17 18 19 20 21
[4,] 22 23 24 25 26 27 28
[5,] 29 30 31 32 33 34 35
样本数据
set.seed(3)
data <- data.frame(XPos = runif(1000,0,1400), YPos = runif(1000,0,1000))
set.seed(3)
数据问题是他的数据本机不是矩阵格式。因此,他需要将其数据转换为一个矩阵,该矩阵将在其中引入0,这可能会使您的答案无效,除非您能够找到一种方法来调整解决方案,使其适用于2列的数据帧。它当前适用于2列的data.frame
。请参阅示例数据部分。嗨,伊恩!非常感谢你。我用我的数据试过了,效果很好。我对R和编码比较陌生,我正在努力理解您提供的解决方案。你能解释一下“MARGIN=1”这个参数的作用吗?谢谢大家!<代码>应用
沿矩阵、数组或data.frame的边距应用函数。因为cbind
生成一个2列矩阵,所以我们希望将函数应用于该矩阵的每一行。1
边距是每行的边距,2
边距是每列的边距。实际上,您可以直接将pos.matrix
子集,但我认为这更容易理解。
set.seed(3)
data <- data.frame(XPos = runif(1000,0,1400), YPos = runif(1000,0,1000))