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