Удаление дубликатов комбинаций (независимо от порядка)
У меня есть фрейм данных целых чисел, который является подмножеством всех n выберите 3 комбинации 1...n. Например, для n=5 это что-то вроде:
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 1 2 4
[3,] 1 2 5
[4,] 1 3 4
[5,] 1 3 5
[6,] 1 4 5
[7,] 2 1 3
[8,] 2 1 4
[9,] 2 1 5
[10,] 2 3 4
[11,] 2 3 5
[12,] 2 4 5
[13,] 3 1 2
[14,] 3 1 4
[15,] 3 1 5
[16,] 3 2 4
[17,] 3 2 5
[18,] 3 4 5
[19,] 4 1 2
[20,] 4 1 3
[21,] 4 1 5
[22,] 4 2 3
[23,] 4 2 5
[24,] 4 3 5
[25,] 5 1 2
[26,] 5 1 3
[27,] 5 1 4
[28,] 5 2 3
[29,] 5 2 4
[30,] 5 3 4
То, что я хотел бы сделать, это удалить все строки с дублирующимися комбинациями, независимо от порядка. Например, [1,] 1 2 3
такой же как [1,] 2 1 3
такой же как [1,] 3 1 2
,
unique
, duplicated
и т. д. не принимайте это во внимание. Кроме того, я работаю с довольно большим объемом данных (n ~750), поэтому это должна быть довольно быстрая операция. Существуют ли какие-либо базовые функции или пакеты, которые могут это сделать?
1 ответ
Решение
Просто отсортируйте строки в первую очередь. Что-то вроде:
> dat = matrix(scan('data.txt'), ncol=3, byrow=T)
Read 90 items
> dat.sort = t(apply(dat, 1, sort))
> dat[!duplicated(dat.sort),]
[,1] [,2] [,3]
[1,] 1 2 3
[2,] 1 2 4
[3,] 1 2 5
[4,] 1 3 4
[5,] 1 3 5
[6,] 1 4 5
[7,] 2 3 4
[8,] 2 3 5
[9,] 2 4 5
[10,] 3 4 5