[R] conditional matching of rows of tables
jim holtman
jholtman at gmail.com
Fri Mar 21 02:19:54 CET 2008
This should do it for you:
> A
V1 V2 V3 V4
1 1 a 0 4
2 1 b 5 8
3 2 a 0 3
4 2 b 4 7
> B
V1 V2 V3
1 1 2 3
2 2 4 5
3 2 0 3
4 1 7 8
> B1 <- B # create a copy and add a new column
> B1$key <- ""
> for (i in seq(nrow(B))){
+ indx <- which((B[i,1] == A[,1]) & (B[i,2] >= A[,3]) & (B[i,3] <= A[,4]))
+ if (length(indx) == 0){
+ warning("No match for row:", i)
+ next
+ }
+ if (length(indx) > 1) warning("multiple matches for row:", i)
+ B1$key[i] <- as.character(A$V2[indx[1]]) # take first match if multiples
+ }
>
> B1
V1 V2 V3 key
1 1 2 3 a
2 2 4 5 b
3 2 0 3 a
4 1 7 8 b
>
On Thu, Mar 20, 2008 at 7:00 PM, Stanley Ng <stanleyngkl at gmail.com> wrote:
> Second try :P
>
> I have matrix A of 4 cols:
> 1 a 0 4
> 1 b 5 8
> 2 a 0 3
> 2 b 4 7
>
> And matrix B of 3 cols:
> 1 2 3
> 2 4 5
> 2 0 3
> 1 7 8
>
> I would like to assign (a or b) to the rows of matrix B. The rules are that
> in each row of matrix B, the 1st value must match the 1st col. of matrix A,
> 2nd and 3rd values must lie between 3rd and 4rd cols (inclusive) of matrix
> A.
>
> For example, the 1st row of matrix B is 1 2 3, the 1st value "1" corresponds
> to 1st and 2nd row of matrix A. Next, its 2nd and 3rd values "2" and "3" lie
> between "0" and "4" of 1st row of matrix A. Thus 1st row of matrix B is
> assigned "a". Similarly, the assignments for remaining rows of matrix B are
> 2 4 5 -> "b"
> 2 0 3 -> "a"
> 1 7 8 -> "b"
>
>
>
> -----Original Message-----
> From: jim holtman [mailto:jholtman at gmail.com]
> Sent: Friday, March 21, 2008 00:33
> To: Ng Stanley
> Cc: r-help
> Subject: Re: [R] conditional matching of rows of tables
>
> Not exactly clear on the transformation that you want to do. In your
> example, '1 2 3 -> a', where does the '2 3' come from since I don't see a
> value of 2 in the 3rd & 4th columns. So a better explanation of what you
> are trying to do would be help and show where the values came from in each
> case.
>
> On 3/20/08, Ng Stanley <stanleyngkl at gmail.com> wrote:
> > Hi,
> >
> > Given matrix A of 4 cols.
> >
> > 1 a 0 4
> > 1 b 5 8
> > 2 a 0 3
> > 2 b 4 7
> >
> > I have another matrix B of 3 cols. How to assign (a or b) to the rows
> > such that in each row its 1st value must match the 1st col. of A, 2nd
> > and 3rd values must lie between 3rd and 4rd cols (inclusive) of A
> >
> > 1 2 3 -> a
> > 2 4 5 -> b
> > 2 0 3 -> a
> > 1 7 8 -> b
> >
> > [[alternative HTML version deleted]]
> >
> > ______________________________________________
> > R-help at r-project.org mailing list
> > https://stat.ethz.ch/mailman/listinfo/r-help
> > PLEASE do read the posting guide
> > http://www.R-project.org/posting-guide.html
> > and provide commented, minimal, self-contained, reproducible code.
> >
>
>
> --
> Jim Holtman
> Cincinnati, OH
> +1 513 646 9390
>
> What is the problem you are trying to solve?
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>
--
Jim Holtman
Cincinnati, OH
+1 513 646 9390
What is the problem you are trying to solve?
More information about the R-help
mailing list