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

B.-Markus Schuller b.markus.schuller at googlemail.com
Tue Jan 11 15:58:10 CET 2011


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



More information about the R-sig-ecology mailing list