[R] Is there a faster way to do it?

jim holtman jholtman at gmail.com
Wed Oct 28 18:02:36 CET 2009


Here is a faster way of doing the replacement: (provide reproducible
data next time)

> x <- matrix(sample(6:9, 64, TRUE), 8)
> x
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,]    8    7    7    6    7    8    7    9
[2,]    7    7    8    6    7    6    7    7
[3,]    7    7    7    6    9    6    6    7
[4,]    9    9    7    6    8    7    6    6
[5,]    6    9    9    8    8    9    8    9
[6,]    9    7    6    9    7    8    6    7
[7,]    7    9    8    9    7    9    7    8
[8,]    9    9    6    9    9    8    8    6
> x.f <- 1:8  # replacement values based on column
> x.ind <- which(x == 9, arr.ind=TRUE)
> x.ind
      row col
 [1,]   4   1
 [2,]   6   1
 [3,]   8   1
 [4,]   4   2
 [5,]   5   2
 [6,]   7   2
 [7,]   8   2
 [8,]   5   3
 [9,]   6   4
[10,]   7   4
[11,]   8   4
[12,]   3   5
[13,]   8   5
[14,]   5   6
[15,]   7   6
[16,]   1   8
[17,]   5   8
> x[x.ind] <- x.f[x.ind[,'col']]
> x
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,]    8    7    7    6    7    8    7    8
[2,]    7    7    8    6    7    6    7    7
[3,]    7    7    7    6    5    6    6    7
[4,]    1    2    7    6    8    7    6    6
[5,]    6    2    3    8    8    6    8    8
[6,]    1    7    6    4    7    8    6    7
[7,]    7    2    8    4    7    6    7    8
[8,]    1    2    6    4    5    8    8    6


On Wed, Oct 28, 2009 at 12:55 PM, Marcio Resende
<mresendeufv at yahoo.com.br> wrote:
>
> #Mdarts is a matrix 2343x788
> #frequencia is a vector 2343x1
> # 9 in Mdarts[fri,frj] stands for my missing values which i want to replace
> by the value in the vector frequencia
>
>
> Mdarts<-t(matrix(scan("C:/GWS/CNB/dartg.txt"),ncol=nindT,nrow=nm, byrow=T))
> frequencia <- matrix(scan("C:/GWS/CNB/freq.txt"),ncol=1)
> for (fri in 1:nindT){
> for (frj in 1:nm){
> Mdarts[fri,frj] <- if (Mdarts[fri,frj] == 9) frequencia[frj] else
> Mdarts[fri,frj]
> Mdarts[fri,frj] <- Mdarts[fri,frj]/1-(frequencia[frj]^2)
> }
> }
>
> Is there a faster way to it?
> Maybe using any apply function?
> Thanks in advance
> --
> View this message in context: http://www.nabble.com/Is-there-a-faster-way-to-do-it--tp26098223p26098223.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> 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.
>



-- 
Jim Holtman
Cincinnati, OH
+1 513 646 9390

What is the problem that you are trying to solve?




More information about the R-help mailing list