Что можно сделать, чтобы найти и удалить полудублированные строки в матрице? - PullRequest
0 голосов
/ 10 июня 2018

Предположим, у меня есть эта матрица

set.seed(123)
x <- matrix(rnorm(410),205,2)
x[8,] <- c(0.13152348, -0.05235148) #similar to x[5,] 
x[16,] <- c(1.21846582, 1.695452178) #similar to x[11,] 

Значения очень похожи на строки, указанные выше, и в контексте целых данных они являются полудубликатами.Что я мог сделать, чтобы найти и удалить их?Мои исходные данные - это массив, который содержит много таких матриц, но положение полудубликатов одинаково во всех матрицах.

Я знаю agrep, но, насколько я понимаю, функция работает с векторами.

1 Ответ

0 голосов
/ 10 июня 2018

Вам нужно будет установить порог, но вы можете просто вычислить расстояние между каждой строкой, используя dist и найти точки, которые достаточно близко друг к другу.Конечно, каждая точка находится рядом с собой, поэтому вам нужно игнорировать диагональ матрицы расстояний.

DM = as.matrix(dist(x))
diag(DM) = 1            ## ignore diagonal
which(DM < 0.025, arr.ind=TRUE)
    row col
8     8   5
5     5   8
16   16  11
11   11  16
48   48  20
20   20  48
168 168  71
91   91  73
73   73  91
71   71 168

Здесь находятся точки закрытия, которые вы создали, и несколько других, которые были сгенерированы случайным образом.

...