[R] zeros to NA's - faster

Dennis Murphy djmuser at gmail.com
Wed Nov 23 22:10:23 CET 2011


Matrix multiplication, maybe?

> all_data %*% iu
     a b c
[1,] 1 4 0
[2,] 2 5 0
[3,] 3 6 0

I have no idea if this is a general solution or not, but it works in
this case. If you need something else, perhaps a more realistic
example would help.

Dennis

On Wed, Nov 23, 2011 at 11:41 AM, Ben quant <ccquant at gmail.com> wrote:
> Hello,
>
> Is there a faster way to do this? Basically, I'd like to NA all values in
> all_data if there are no 1's in the same column of the other matrix, iu.
> Put another way, I want to replace values in the all_data columns if values
> in the same column in iu are all 0. This is pretty slow for me, but works:
>
>  all_data = matrix(c(1:9),3,3)
>  colnames(all_data) = c('a','b','c')
>> all_data
>     a b c
> [1,] 1 4 7
> [2,] 2 5 8
> [3,] 3 6 9
>  iu = matrix(c(1,0,0,0,1,0,0,0,0),3,3)
>  colnames(iu) = c('a','b','c')
>> iu
>     a b c
> [1,] 1 0 0
> [2,] 0 1 0
> [3,] 0 0 0
>
>    fun = function(x,d){
>      vals = d[,x]
>      i = iu[,x]
>      if(!any(i==1)){
>        vals = rep(NA,times=length(vals))
>      }else{
>        vals
>      }
>      vals
>    }
>    all_data = sapply(colnames(iu),fun,all_data)
>> all_data
>     a b  c
> [1,] 1 4 NA
> [2,] 2 5 NA
> [3,] 3 6 NA
>
> ...again, this work, but is slow for a large number of columns. Have
> anything faster?
>
> Thanks,
>
> ben
>
>        [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>



More information about the R-help mailing list