[R] Number of replications of a term

Chuck Cleland ccleland at optonline.net
Tue Jan 24 18:32:50 CET 2006


Laetitia Marisa wrote:
> Hello,
> 
> Is there a simple and fast function that returns a vector of the number 
> of replications for each object of a vector ?
> For example :
> I have a vector of IDs :
> ids <- c( "ID1", "ID2", "ID2", "ID3", "ID3","ID3", "ID5")
> 
>  I want the function returns the following vector where each term is the 
> number of replicates for the given id :
> c( 1, 2, 2, 3,3,3,1 )

 > rep(as.vector(table(ids)), as.vector(table(ids)))
[1] 1 2 2 3 3 3 1

> Of course I have a vector of more than 40 000 ID and the function I 
> wrote (it orders my data and checks on ID:Name of the data if the next 
> term is the same as the previous one (see below) ) is really slow 
> (30minutes for 44290 terms). But I don't have time by now to write a C 
> function.
> Thanks a lot for your help,
> 
> Laetitia.
> 
> 
> 
> Here is the function I have written maybe I have done something not 
> optimized :
> 
> repVector <- function(obj){
> 
>     # order IDName 
>     ord <- gif.indexByIDName(obj)
>     ordobj <- obj[ord,]
> 
>     nspots <- nrow(obj)
>     # vector of spot replicates number           
>     spotrep <- rep(NA, nspots )
>    
>     # function to get ID:Name for a given spot       
>     spotidname <- function(ind){
>             paste(ordobj$genes[ind, c("ID","Name") ], collapse=":")
>     }
> 
>     spot <- 1   
> 
>     while( spot < nspots ){
>         i<-1
>         while( spotidname(spot) == spotidname(spot + i) ){            
>        
>             i <- i + 1
>         }
>        
>         spotrep[spot : (spot + i-1)] <- i
>         spot <- spot + i
>         #cat("spot : ",spot,"\n")   
>     }       
>    
>     obj$genes$spotrep <- spotrep[order(ord)]
> 
>     obj
>                
> }
> 
> ______________________________________________
> 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
> 

-- 
Chuck Cleland, Ph.D.
NDRI, Inc.
71 West 23rd Street, 8th floor
New York, NY 10010
tel: (212) 845-4495 (Tu, Th)
tel: (732) 452-1424 (M, W, F)
fax: (917) 438-0894




More information about the R-help mailing list