[R] filling values in a vector using smaller vector

Milton Huang mph at emotrics.com
Wed Dec 24 17:02:37 CET 2008


Thank you both for such beautiful solutions.  Just what I was looking for!  I 
love the Internet, R, and the R-list!  There is so much opportunity to learn.  
In fact, looking at the replace function, I see the two solutions are the 
same:

> replace
function (x, list, values)
{
    x[list] <- values
    x
}
<environment: namespace:base>

Thanks again.  You made my day.  Have a happy holiday season.

-milton
======================
On Wednesday 24 December 2008 1:46 am, you wrote:
> Wacek Kusnierczyk wrote:
> > Milton Huang wrote:
> >>> Dear list members:
> >>>
> >>> I am looking for an elegant (or efficient) way to accomplish the
> >>> following:
> >>>
> >>> take a large boolean vector and fill the TRUE values with the values
> >>> from a smaller boolean vector that has a length that is the number of
> >>> TRUE values of the large vector.
> >>>
> >>> Example:
> >>>
> >>> large<- c(FALSE, FALSE, FALSE, TRUE, FALSE, FALSE,  TRUE, FALSE, FALSE,
> >>> FALSE, TRUE, FALSE)
> >>>
> >>> small<- c(TRUE, FALSE, TRUE)
> >>>
> >>> desired output = c(FALSE, FALSE, FALSE, *TRUE*, FALSE, FALSE,  *FALSE*,
> >>> FALSE, FALSE, FALSE, *TRUE*, FALSE)
> >
> > replace(large, which(large), small)
>
> in fact, this will do:
>
> replace(large, large, small)
>
> vQ
--------------------------
I believe the following does what is wanted:

desired <- large
desired[large] <- small


Patrick Burns
patrick at burns-stat.com
+44 (0)20 8525 0696
http://www.burns-stat.com
(home of S Poetry and "A Guide for the Unwilling S User")



More information about the R-help mailing list