Message Boards Message Boards

Sort a table with respect to other?


Hi, I have two 36 X 3 tables. First columns in both of them are independent terms/numbers, while second and third columns have same indices (numbers) from 1 - 6, but in different orders. I want to arrange the rows of table B in the same order as in A, with respect to second and third elements of them. For example if

A = {{X, 2, 1}, {Y, 2, 3}, {Z, 2, 4}...}


B = {{x, 2, 3}, {y, 2, 4}, {z, 2, 1}....}

I want B to be rearranged to

B_new = {{z, 2, 1}, {x, 2, 3}, {y, 2, 4}....}

Will be thankful for any suggestion. Attached is the *.nb file having these tables.

9 months ago

Step 1. for every element in A, there is a corresponding element in B. The first step is to write a function that takes in an element from A and gives the corresponding element from B.

  • To do this, first write a function that checks whether an element from A and an element from B match.
  • Then use the Select function to make the function in Step 1.

Step 2. Go thru every element in A and replace it with the corresponding element in B.

  • The cleanest way to do this is with Map. You may prefer using a For loop or using Replace depending on your coding style.

I'm not sure what your programming experience is. Can you write a function that takes two elements (one from A and one from B) and checks whether they match each other?

POSTED BY: Sean Clarke
9 months ago

You can try this way:

Bnew = With[{restA = Map[Rest, A]},
  Sort[B, OrderedQ[{Position[restA, Rest[#1]],
      Position[restA, Rest[#2]]}] &]]
POSTED BY: Gianluca Gorni
9 months ago

I would do the following:

B[[Permute[Ordering[B[[All,{2,3}]]], Ordering[A[[All,{2,3}]]]]]]
POSTED BY: Carl Woll
9 months ago

Group Abstract Group Abstract