如果这是一个明显的问题,请原谅我,我是一个渴望学习的初学者 R 用户。
我有一个 4 列的数据框,大约 150 万行包含坐标信息,其中每一行代表一个特定位置。我想做的是将这些数据运行到一个函数中,该函数包含一系列 if else 语句,这些语句确定较大框中特定位置的区域。例如,一个点可以在中心,沿着盒子的边缘在 1.5 英寸内,在盒子的内侧,但不在边缘也不在中心,或者在盒子的外面。
每个 if 语句确定一组点是否在指定区域中,如果是,则结果是 if 语句将“1”放在另一个数据框的相应行中。
这是我正在尝试做的事情的可视化:
从名为“维度”的数据框中获取此位置数据:
sz_top | sz_bot | px | pz |
3.526 | 1.615| -1.165| 3.748 |
通过这些语句运行它(真正的语句要长得多),其中“else”条件意味着该点完全位于框外:
if(in center) else if(on edge) else if(in box, but not in center or on edge) else
当程序发现哪个条件为真时,它会将 1 放在另一个名为“call”的数据框中的相应列中(这些列是列 50-53)。如果代码发现该点位于中心,这就是该行的样子:
center| edge| other_in| out|
1 | 0 | 0 | 0|
需要注意的可以提高效率的一件事是,坐标实际上也包含在第 22、23、26 和 27 列的“调用”数据框中,但我将它们移动到“维度”,因为它更容易工作和。这绝对可以改变。
我现在非常不清楚如何从这里开始。我已经编写了所有 if else 语句,但我不清楚我的程序将如何知道它在哪一行以正确地用测试结果标记相应的行。
如果您想从我这里得到更多信息,请告诉我。
谢谢!
编辑:
这是“维度”数据框的示例:
sz_top sz_bot px pz
1 3.526 1.615 -1.165 3.748
2 3.29 1.647 -0.412 1.9
3 3.29 1.647 -1.213 1.352
4 3.565 1.75 -1.041 2.419
5 3.565 1.75 -0.357 1.776
6 3.565 1.75 0.838 0.834
7 3.541 1.724 -1.619 3.661
8 3.541 1.724 -2.498 2.421
9 3.541 1.724 -1.673 2.348
10 3.541 1.724 -1.572 2.982
11 3.305 1.5 -1.316 2.842
这是我的一个 if 语句的示例。其他的非常相似,只是查看相关框周围的不同位置:
if(
((as.numeric(as.character(dimensions$px))*12)>= -3)
&&
((as.numeric(as.character(dimensions$px))*12)<= 3)
&&
((as.numeric(as.character(dimensions$pz))*12)<=((as.numeric(as.character(dimensions$sz_top))*12-as.numeric(as.character(dimensions$sz_bot))*12)/2)+(as.numeric(as.character(dimensions$sz_bot))*12)+3)
&&
((as.numeric(as.character(dimensions$pz))*12)>=((as.numeric(as.character(dimensions$sz_top))*12-as.numeric(as.character(dimensions$sz_bot))*12)/2)+(as.numeric(as.character(dimensions$sz_bot))*12)-3)
){return(1)
}