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

Adaikalavan Ramasamy a.ramasamy at imperial.ac.uk
Thu Oct 29 12:18:51 CET 2009


You might also want to consider using na.string="9" in the scan().



jim holtman wrote:
> 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.
>>
> 
> 
>




More information about the R-help mailing list