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