如何在 r 中的所需区域中获取点集 (x,y)

how to get point set (x,y) in a desired area in r

下图是excel文件中x,y的设置图,共有8760对x和y。我想去除红圈区域的噪声数据对,并输出一个新的 excel 文件,其中包含剩余数据对。我怎么能在 R 中做到这一点?

R 和 EXCEL 都读取和写入 .csv 文件,因此您可以使用它们来回传输数据。

你没有提供任何数据所以我做了一些垃圾数据产生了类似的问题。

数据

set.seed(2017)
x = runif(8760, 0,16)
y = c(abs(rnorm(8000, 0, 1)), runif(760,0,8)) 
XY = data.frame(x,y)

识别噪声点的一种方法是查看与最近邻居的距离。在密集区域,最近的邻居会更近。在非密集区域,它们将分开得更远。包 dbscan 提供了一个很好的函数来获取到 k 最近邻居的距离。对于这个问题,我使用了 k=6,但您可能需要调整您的数据。查看到第 6 个最近邻的距离分布,我们看到大多数点在 0.2

的距离内有 6 个邻居
XY6 = kNNdist(XY, 6)
plot(density(XY6[,6]))

所以我假设第 6 个最近邻更远的点是噪声点。只需更改颜色以查看哪些点受到影响,我们得到

TYPE = rep(1,8760)
TYPE[XY6[,6] > 0.2] = 2
plot(XY, col=TYPE)

当然,如果你想限制到非噪声点,你可以使用

NonNoise = XY[XY6[,6] > 0.2,]

使用@G5W 的例子:

补数据:

set.seed(2017)
x = runif(8760, 0,16)
y = c(abs(rnorm(8000, 0, 1)), runif(760,0,8)) 
XY = data.frame(x,y)

将分位数回归拟合到第 90 个百分位数:

library(quantreg)
library(splines)
qq <- rq(y~ns(x,20),tau=0.9,data=XY)

计算并绘制预测曲线:

xvec <- seq(0,16,length.out=101)
pp <- predict(qq,newdata=data.frame(x=xvec))
plot(y~x,data=XY)
lines(xvec,pp,col=2,lwd=2)

仅保留预测线下方的点:

XY2 <- subset(XY,y<predict(qq,newdata=data.frame(x)))

plot(y~x,data=XY2)
lines(xvec,pp,col=2,lwd=2)

您可以通过减少结数来减少线的摆动,例如y~ns(x,10)