MathGroup Archive 2009

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: identical rows in tables

  • To: mathgroup at smc.vnet.net
  • Subject: [mg97634] Re: identical rows in tables
  • From: "Sjoerd C. de Vries" <sjoerd.c.devries at gmail.com>
  • Date: Tue, 17 Mar 2009 05:01:46 -0500 (EST)
  • References: <gpl5qr$oss$1@smc.vnet.net>

Hi Peter,

You could try Tally to find rows that occur more than once, and then
Position to find their location:

data =
  {{1, 2, 3, 4, 5, 6, 7, 8}, {1, 4, 6, 2, 8, 3, 7, 5}, { 1, 4, 2, 6,
    3, 8, 5, 7}, {1, 3, 2, 5, 4, 7, 6, 8}, {1, 3, 5, 2, 7, 4, 8,
    6}, {1, 8, 7, 6, 5, 4, 3, 2}, {1, 8, 6, 7, 4, 5, 2, 3}, {1, 3, 2,
    5, 4, 7, 6, 8}, {1, 3, 5, 2, 7, 4, 8, 6}};

doubles =
  Position[data, #] & /@
    Select[Tally[data], (#[[2]] > 1) &][[All, 1]] // Flatten;

Grid[data,
 ItemStyle -> {Automatic,
   Sequence[Thread[doubles -> Table[Red, {Length[doubles]}]]]}]

Why would you turn the separate numbers in one string? Wouldn't that
make the result ambiguous if n>9? Anyways:

StringJoin @@@ (Map[ToString, data, {2}])

will do the trick (use an additional ToExpression to convert to a
number).

The function Strings in the Combinatorica package generates
permuations of strings.

Cheers -- Sjoerd

On Mar 16, 11:23 am, "King, Peter R" <peter.k... at imperial.ac.uk>
wrote:
> I have a table of values
>
> e.g.{{1, 2, 3, 4, 5, 6, 7, 8}, {1, 4, 6, 2, 8, 3, 7, 5}, {1, 4, 2, 6, 3,
>   8, 5, 7}, {1, 3, 2, 5, 4, 7, 6, 8}, {1, 3, 5, 2, 7, 4, 8, 6}, {1, 2,
>    4, 3, 6, 5, 8, 7}, {1, 2, 3, 4, 5, 6, 7, 8}}
>
> and want to check if any rows are identical (so there are none in the above
>  - I can remove last or first row which are supposed to be the same).
>
> But in the following {{1, 2, 3, 4, 5, 6, 7, 8}, {1, 4, 6, 2, 8, 3, 7, 5}, {
> 1, 4, 2, 6, 3,
>   8, 5, 7}, {1, 3, 2, 5, 4, 7, 6, 8}, {1, 3, 5, 2, 7, 4, 8, 6}, {1, 8,
>    7, 6, 5, 4, 3, 2}, {1, 8, 6, 7, 4, 5, 2, 3}, {1, 3, 2, 5, 4, 7, 6,
>   8}, {1, 3, 5, 2, 7, 4, 8, 6},....}
>
>  there is a pair {1, 3, 2, 5, 4, 7, 6,
>   8}, {1, 3, 5, 2, 7, 4, 8, 6} which are the same.
>
> In an ideal world when I print out (in say TableForm)  the repeated rows can
> be printed in red (or some specified colour)
>
> These rows are permutations if that makes any difference. The tables can be
>  of any size (but always permutations of n numbers)
>
> as a subsidiary question is there an easy way to convert the tables into 
> numbers (or strings) eg
>
> {12345678,14628375,14263857 etc}
>
> Alternatively is there an easy way to perform permutations on strings of 
> characters?
>
> Many thanks for your help to the multiple questions
> ps I am using Mathematica 6.03



  • Prev by Date: Re: Different results with FourierTransform[]
  • Next by Date: Re: identical rows in tables
  • Previous by thread: Re: identical rows in tables
  • Next by thread: Re: identical rows in tables