change values of a vector selectively
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