Re: select 1st column element based on criteria in 2nd AND 3rd column
- To: mathgroup at smc.vnet.net
- Subject: [mg124519] Re: select 1st column element based on criteria in 2nd AND 3rd column
- From: "Nasser M. Abbasi" <nma at 12000.org>
- Date: Sun, 22 Jan 2012 07:25:41 -0500 (EST)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <jfe3q1$a2i$1@smc.vnet.net>
- Reply-to: nma at 12000.org
On 1/21/2012 4:25 AM, hanciong awesome wrote: > Hello all, suppose I have a table: > > pairs = {{1, 3, 4}, {2, 4, 6}, {3, 6, 7}, {4, 1, 8}, {5, 3, 9}, {6, 2, > 10}, {7, 5, 11}, {8, 2, 13}, {2, 3, 4}, {5, 6, 7}} > > how to select rows for which the 2nd column is between 3 and 5, AND > the 3rd column is between 7 and 10? So I want to do something similar > to this: > > Select[pairs, 5>= #[[2]]>= 3& AND 10>= #[[3]]>= 7] > > but I just couldn't get it to work. what should I do? Thank you > So, you want just the first column entry as a result? not the full row(s) found? ok, so, in your example, the row that matches this condition is {{5, 3, 9}}, so you want just 5 as a result, correct? In these below, I find the row, then simply you can do Map[First,%] to pick the first entry of the result, which in general can contain more than one row, but in your example it happened to be one row. (1) Cases[pairs, {_, x_, y_} /; x >= 3 && x <= 5 && y >= 7 && y <= 10] First /@ % ===>{5} (2) Select[pairs, ( IntervalMemberQ[Interval[{3, 5}], #[[2]]] && IntervalMemberQ[Interval[{7, 10}], #[[3]]] ) & ] First /@ % ===>{5} (3) pos = Position[pairs, {_, x_, y_} /; x>=3 && x<=5 && y>=7 && y<= 10]; Extract[pairs, pos] First /@ % ===>{5} (4) Pick[pairs, Map[(#[[2]] >= 3 && #[[2]] <= 5 && #[[3]] >= 7 && #[[3]] <= 10) &, pairs] ] First /@ % ===>{5} --Nasser