如何检测数据集的每个值是否都超出参考数据集

时间:2019-07-11 04:36:07

标签: r loops outliers

最近,R生态系统已被许多软件包所丰富,这些软件包实现了用于单变量和多变量数据的异常检测的各种算法。因此,检测数据集中的异常值相对简单。我的问题如下:我有两个数据集(数据帧):一个是引用,另一个包含感兴趣的值。我有兴趣评估第二数据集中的每个数据点(即每一行)与参考数据集相比是否离群。

从理论上讲,我认为我的方法应该是:将第二个数据集的第一行添加到第一个数据集(例如行绑定)。计算离群值(例如,使用DDoutlier软件包),然后进行排序,然后查看新添加的行是否在最高分之中。然后以迭代方式对第二,第三,第四行等进行相同的操作,直到第二数据帧的最后一行。与第一个数据集相比,这将使我能够确定第二个数据集的哪些值是异常值。

我的问题是:如何在R中有效地做到这一点?我曾考虑过使用for循环,但是我知道for循环不是最有效的方法。在没有替代方法的情况下,我会考虑使用for循环,但是当尝试编写一个循环时,会出现错误,因为我做错了什么,但我不知道如何纠正它。

X <- iris[,1:4]
X

# Let's assume that the first 50 rows (X[1:50, 1:4]) is the reference, and the rest (X[51:150, 1:4]) is the test data. 


library(DDoutlier)
outlier_score <- list()
for (i in seq_along(1:(nrow(X)-50))){
  newdf <- X[c(1:50, 50+i), ]
  outlier_score[[i]]<- COF(newdf, k=5)
}

尝试实现此for循环,出现以下错误:

distMatrix [SBNpath,SBNpath]错误:下标超出范围

0 个答案:

没有答案