[R] checking for identical columns in a mxn matrix

Marc Schwartz MSchwartz at medanalytics.com
Wed Dec 3 19:33:05 CET 2003


On Wed, 2003-12-03 at 12:06, Rajarshi Guha wrote:
> Hi,
>   I have a rectangular matrix and I need to check whether any columns
> are identical or not. Currently I'm looping over the columns and
> checking each column with all the others with identical().
> 
> However, as experience has shown me, getting rid of loops is a good idea
> :) Would anybody have any suggestions as to how I could do this job more
> efficiently.
> 
> (It would be nice to know which columns are identical but thats not a
> necessity.)


If your matrix is 'x' and contains text and/or integer values (since
float comparisons can be problematic) you can use:

any(duplicated(x, MARGIN = 2))

to find out if any of the columns are duplicated and  

which(duplicated(x, MARGIN = 2))

to get the column numbers that are duplicates in the matrix.

If you want to extract the unique columns, you can use:

unique(x, MARGIN = 2)

See ?duplicated and ?unique for more information.

Example:

> x <- matrix(c(1:3, 4:6, 1:3, 7:9), ncol = 4)
> x
     [,1] [,2] [,3] [,4]
[1,]    1    4    1    7
[2,]    2    5    2    8
[3,]    3    6    3    9

> any(duplicated(x, MARGIN = 2))
[1] TRUE

> which(duplicated(x, MARGIN = 2))
[1] 3

> unique(x, MARGIN = 2)
     [,1] [,2] [,3]
[1,]    1    4    7
[2,]    2    5    8
[3,]    3    6    9

HTH,

Marc Schwartz




More information about the R-help mailing list