[R-sig-eco] change values of a vector selectively

Christian Parker cparker at pdx.edu
Tue Jan 11 16:43:49 CET 2011


Mango,
I believe what you have is the right idea. There are some things you could do that might speed it up. For example, don't search for c('B',1,2), r will need to convert those all to characters first. Instead ask if exp$marker=='0'. Another thing you could do is create an empty vector to store the results and then replace the column after it's done, that's a lot of work to look up the position every time and then replace it. It might also be slow because they are all characters. In that case you might convert them to numbers with something like an ifelse statement but that probably would not save much in the end.

-Chris




On Jan 11, 2011, at 6:58 AM, "B.-Markus Schuller" <b.markus.schuller at googlemail.com> wrote:

> Hey,
> 
> I have a vector containing mostly zeroes. At varying positions are markers that mark different channels ("B", 1, 2).
> 
> > head(exp$Marker, 100)
>  [1] "B" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0"
> [19] "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0"
> [37] "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0"
> [55] "0" "0" "0" "0" "0" "1" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0"
> [73] "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0" "0"
> [91] "0" "0" "0" "0" "0" "0" "0" "0" "0" "0"
> 
> I would like to change all zeroes between two markers to the marker that came before.
> E.g. everything after "B" shall be "B" until the 1. Then everything shall be 1 until the next "B" and so on. I hope you can imagine what I intend.
> 
> I tried it in a loop:
> 
> for(i in 1:length(exp$Marker)){
>  if(! exp$Marker[i] %in% c("B", 1, 2))
>    exp$Marker[i] <- exp$Marker[i-1]
> }
> 
> but that takes forever. Can anyone point me to another solution?
> E.g. identify all so far not marked elements, like this
> 
> exp$Marker[which(! exp$Marker %in% c("B", 1, 2))]
> 
> and change them to the desired values. But i cannot figure out how to change them selectively...
> 
> Thanks for your help!
> 
> Cheers,
> Mango
> -- 
> -----------------------------------------
> B.-Markus Schuller aka Mango
> 
> Sensory Ecology Group
> Max-Planck-Institute for Ornithology
> 82319 Seewiesen, Germany
> 
> phone: +49 (0)8157 932 -378
> fax:   +49 (0)8157 932 -344
> email: schuller at orn.mpg.de
> http://www.orn.mpg.de/nwg/abtsiemers.html
> -----------------------------------------
> Never run for the bus.
> Never skip tea.
> 
> 
> 
> -----
> No virus found in this message.
> Checked by AVG - www.avg.com
> 
> _______________________________________________
> R-sig-ecology mailing list
> R-sig-ecology at r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-sig-ecology
> 



More information about the R-sig-ecology mailing list