[R] indexing without looping

Greg Johnson greg at nosnhoj.org
Thu Feb 1 17:28:45 CET 2007


javier garcia-pintado <jgarcia <at> ija.csic.es> writes:

> 
> Hello,
> I've got a data.frame like this:
> 
> > > assignation <- data.frame(value=c(6.5,7.5,8.5,12.0),class=c(1,3,5,2))
> > > assignation
> >   
>   value class
> 1   6.5     1
> 2   7.5     3
> 3   8.5     5
> 4  12.0     2
> 
> > >   
> >   
> 
> and a long vector of classes like this:
> 
> > > x <- c(1,1,2,7,6,5,4,3,2,2,2...)
> >   
> 
> And would like to obtain  a vector of length = length(x), with the
> corresponding values extracted from assignation table. Like this:
> 
> > > x.value
> >   
>  [1]  6.5  6.5 12.0   NA   NA  8.5   NA  7.5 12.0 12.0 12.0
> 
> Could you help me with an elegant way to do this ?
> (I just can do it with looping for each class in the assignation table,
> what a think is not perfect in R's sense)
> 
> Wishes,
> Javier
> 

Javier,

you might try this:
> assignation <- data.frame(value=c(6.5,7.5,8.5,12.0),class=c(1,3,5,2))
> assignation
  value class
1   6.5     1
2   7.5     3
3   8.5     5
4  12.0     2

> x <- c(1,1,2,7,6,5,4,3,2,2,2)
> x
 [1] 1 1 2 7 6 5 4 3 2 2 2

> merge( x, assignation, by.x=1, by.y=2, all.x=T )
   x value
1  1   6.5
2  1   6.5
3  2  12.0
4  2  12.0
5  2  12.0
6  2  12.0
7  3   7.5
8  4    NA
9  5   8.5
10 6    NA
11 7    NA



More information about the R-help mailing list