Rimozione di combinazioni duplicate (indipendentemente dall’ordine)

Ho un frame di dati di interi che è un sottoinsieme di tutti i n scegliere 3 combinazioni di 1 … n. Ad esempio, per n = 5, è qualcosa del tipo:

[,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 

Quello che mi piacerebbe fare è rimuovere qualsiasi riga con combinazioni duplicate, indipendentemente dall’ordinazione. Ad esempio, [1,] 1 2 3 è uguale a [1,] 2 1 3 è uguale a [1,] 3 1 2 .

unique , duplicated , ecc. non sembra tenerne conto. Inoltre, sto lavorando con una grande quantità di dati (n è ~ 750), quindi dovrebbe essere un’operazione piuttosto veloce. Ci sono funzioni di base o pacchetti che possono farlo?

Per prima cosa ordina le righe. Qualcosa di simile a:

 > 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