Database 删除R中镜像数据点的最佳(最快)方法?

Database 删除R中镜像数据点的最佳(最快)方法?,database,r,subset,standard-deviation,Database,R,Subset,Standard Deviation,我正在过滤镜像点的大数据集;大小相等但符号相反的数据点。这些镜像对往往是v。较大,使标准偏差倾斜。我的代码可以工作[即,它删除镜像付款对],但运行需要几个小时。有没有更好的方法在R中实现这一点 代码如下: for (i in 1:length(data)) { for(j in 1:length(data)) { if (data[i] < 0){ if (abs(data[i]) == abs(data[j])){

我正在过滤镜像点的大数据集;大小相等但符号相反的数据点。这些镜像对往往是v。较大,使标准偏差倾斜。我的代码可以工作[即,它删除镜像付款对],但运行需要几个小时。有没有更好的方法在R中实现这一点

代码如下:

for (i in 1:length(data)) {
    for(j in 1:length(data)) {
        if (data[i] < 0){
            if (abs(data[i]) == abs(data[j])){
                mirrors = rbind(mirrors, c(data[i], data[j]))
                break
                }
            }
        }
    }
数据是一大组付款申请,约200000项


我知道,我知道,因为循环在R中是亵渎神明的,但我想不出另一种方法来做到这一点。

正如@mathematic.coffee所指出的,答案取决于您是否要删除或减少镜像值。假设镜像值是可交换的:

M <- c(1:10, -(1:10), 11:25)

## remove all but one set of mirrored duplicates
M[!duplicated(abs(M))] # retains whatever set of mirrored duplicates comes first, positive or negative
unique(abs(M)) # retains positive half of mirrored duplicates

## remove all mirrored duplicate pairs (or triplets, or quadruplets, or...)
d <- which(duplicated(abs(M), fromLast = T) | duplicated(abs(M))) # any duplicated value
M[-d]

数据是向量吗?价值的顺序重要吗?如果它被分类,这会是一个问题吗?那么您想从数据中删除任何出现的值x,而值-x也在数据中?i、 e.c1,2,3,4,5,-1,-1,-4->c2,3,5?注意这里-1出现了两次,但1只出现了一次,我已经把它们全部删除了,谢谢你的关注!数据是一个向量。顺序确实很重要,尽管我可以在数据中包含一个标识号,以便它有两列。我只想删除镜像对x和-x的第一个匹配项。第二个for循环中的中断就是为了实现这一目的。输入/输出示例将有助于您展示在多种情况下您希望发生的情况多对重复、不平衡重复、不同顺序等。此外,在您的代码中生成一个矩阵镜像,但是,在您对答案的评论中,您谈论的是减少的数据,但没有解释它采取什么形式删除负面重复并保留正面?那么-1,2,-3,1,-1,1,2->2,-3,1,-1,1,2?在这里,我只将第一个-1,1标识为重复,并仅删除了-1,而将第二个-1,1ah yes保留为重复。。有一段时间,我一直在玩这个功能,但是我想不出来。这非常有用!所以d等于M,但没有任何镜像?i、 e.如果M包括值-1、1、1,那么这三个值都将被删除?是否有一种简单的方法只删除第一次出现的镜像对?与第二个for循环中的break类似?所以M仍然应该包含值1,但是-1和1被删除了。在我的例子中,d是重复对/三元组/任何东西的索引。所以M[-d]会删除所有的重复项。要保留最后一个副本,请执行以下操作:M[!duplicatedBSM,fromLast=T]。看到这个:M这更好,但仍然不起作用。应保留正的重复值,在此方法中,这些值将被删除。例如,M=c1:10,1:10,11:25不应受到影响,但M[!DuplicatedBSM,fromLast=T]'返回M=c1:10,11:25`我将尝试调整它,但如果您有任何其他建议,将不胜感激。remNegDup