过滤低于预定义圆值的数据

Filter data that falls under the value of a predefined circle

我有这样的情节

我的目标是过滤掉所有落入内圈的数据。

我已经尝试过仅通过绘制圆圈的数据进行过滤的方法,问题是它具有 X 和 Y 值并且它们位于笛卡尔地图的所有 4 个空间中,因此如果点在上方可能是好的(按大于某个值的值进行过滤)但这会过滤掉仍在内圈之外但低于内圈的值。

我也尝试过使用积分来做事,但我的数学很生疏。积分假设能够识别曲线下的值。如果曲线画出内圆,也许我可以过滤掉值。对我来说,说起来容易做起来难,所以不胜感激。

PS: 母语不是英语,请见谅。


圈子创建者:

radii=c(sqrt(1/2),1)
theta <- seq(0, 2 * pi, length = 500)

#Inner Circle:

 xtemp1=radii[1]*cos(theta)
 ytemp1=radii[1]*sin(theta)
 circ1=as.data.frame(cbind(xtemp1,ytemp1))

#Outer Circle:

 xtemp2=radii[2]*cos(theta)
 ytemp2=radii[2]*sin(theta)
 circ2=as.data.frame(cbind(xtemp2,ytemp2))

这里是一小部分数据(名为temp):

Comp_1,Comp_2
0.253,-0.29
-0.23,0.222
-0.384,0.432
-0.032,0.805
-0.261,0.265
-0.181,0.344
-0.133,-0.436
-0.358,-0.004
-0.139,-0.314
0.303,0.257
-0.131,0.602

对于情节:

#Plot
p1=ggplot(data=temp, aes(x=Comp_1, y=Comp_2)) + geom_point() +
  scale_x_continuous(limits=c(-1,1), breaks=seq(-1,1,by=0.1)) + 
  scale_y_continuous(limits=c(-1,1), breaks=seq(-1,1,by=0.1))
#Circle
p1=p1 + geom_polygon(data=circ1, aes(x=xtemp1, y=ytemp1),size=0.5,inherit.aes = F, colour="black", fill=NA, alpha=0.5) +
  geom_polygon(data=circ2, aes(x=xtemp2, y=ytemp2),size=0.5,inherit.aes = F, colour="black", fill=NA, alpha=0.5)

圆的方程是 x^2 + y^2 = R^2 所以数据集中 x^2 + y^2 < R^2 的任何点落在半径为 R 的圆内.

要删除落入您内圈的点,您只需要

filtered_out = temp[apply(temp^2,1,sum) > radii[1]^2,]

这听起来像是多边形中的点问题 (https://en.wikipedia.org/wiki/Point_in_polygon)。 sp 库中的 point.in.polygon() 函数可能很有用。

point.in.polygon(Comp_1,Comp_2,xtemp1,ytemp1)