[R] replace values in a matrix subject to boolean condition

Werner Wernersen pensterfuzzer at yahoo.de
Thu Mar 24 14:27:14 CET 2005


Uwe Ligges wrote:
> Werner Wernersen wrote:
> 
>> Hi everybody!
>>
>> I am sorry to bother you with a question so simple
but
>> I think there might be a better solution:
>> I have a matrix of size 360x501 where I want to
check
>> the value of each 5th column of each row and
replace it (and the 6th, 
>> 7th,
>> 8th column) by zero if the value is less than 1000.
I have written a 
>> double loop
>> to do that but that requires a lot of time.
>>
>> Is there a faster way to achieve this?
> 
> 
> 
> Two ways to interpret your question:
> 
> 1) if col5 < 100 replace col5 & col6 & col7 & col8
by 0:
> 
>    X[X[,5] < 1000, 5:8] <- 0
> 
> 
> 2) if col5 < 100 replace col5 by 0, if col6 < 100
replace col6 by 0, ...:
> 
> 
> for(i in 5:8)
>    X[X[,i] < 1000, i] <- 0
> 
> Uwe Ligges
> 
> 
> 
> 
> 
>> Thanks,
>>    Werner
>>
>> ______________________________________________
>> R-help at stat.math.ethz.ch mailing list
>> https://stat.ethz.ch/mailman/listinfo/r-help
>> PLEASE do read the posting guide! 
>> http://www.R-project.org/posting-guide.html
> 
> 
> 
> 
Thanks for all your answers!
Now I did it with
	for (j in seq(3,length(d[1,]),by=5)) {
		d[d[,j]<1000,j:(j+3)] <- c(0,0,0,0)
	}
which is so much faster than the double loop.

Thanks again,
   Werner




More information about the R-help mailing list