答案 0 :(得分:3)
R和EXCEL都读取和写入.csv文件,因此您可以使用它们来回传输数据。
您没有提供任何数据,因此我制作了一些垃圾数据以产生类似的问题。
DATA
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
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,]
答案 1 :(得分:3)
使用@ G5W&#39的示例:
弥补数据:
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)