[R] filling values in a vector using smaller vector

Patrick Burns pburns at pburns.seanet.com
Wed Dec 24 10:35:27 CET 2008


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")

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)
>
> (without the asterisks! )
>
> my first thought as someone new to R was 
> ifelse(large,small, large)
>
> but that returns: c(FALSE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE 
> FALSE FALSE FALSE) because small is cycled to match the size of large instead 
> of the size of the TRUE subset of large.
>
> I am guessing that there is probably a way to do this without writing a loop, 
> but I just don't know the syntax.
>
> -mph
>
> ______________________________________________
> 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.
>
>
>



More information about the R-help mailing list