[R] Calculating First Occurance by a factor

Dimitris Rizopoulos d.rizopoulos at erasmusmc.nl
Mon Mar 30 21:37:41 CEST 2009


one way is:

ind <- ave(Data$IA, Data$Sub, Data$Tr, FUN = function (x) !duplicated(x))
Data[as.logical(ind), ]


I hope it helps.

Best,
Dimitris


jwg20 wrote:
> I'm having difficulty finding a solution to my problem that without using a
> for loop. For the amount of data I (will) have, the for loop will probably
> be too slow. I tried searching around before posting and couldn't find
> anything, hopefully it's not embarrassingly easy.  
> 
> Consider the data.frame, Data,  below
> 
> Data
> Sub Tr  IA   FixInx  FixTime
> p1   t1  1    1        200
> p1   t1  2    2        350
> p1   t1  2    3        500
> p1   t1  3    4        600
> p1   t1  3    5        700
> p1   t1  4    6        850
> p1   t1  3    7        1200
> p1   t1  5    8        1350
> p1   t1  5    9        1500
> 
> What I'm trying to do is for each unique IA get the first occurring FixTime.
> This will eventually need to be done by each Trial (Tr) and each Subject
> Number (Sub). FixInx is essentially the number of rows in a trial. The
> resulting data.frame is below.
> 
> Sub Tr  IA  FirstFixTime
> p1   t1  1   200
> p1   t1  2   350
> p1   t1  3   600
> p1   t1  4   850
> p1   t1  5   1350
> 
> Here is the solution I have now.  
> 
> agg = aggregate(data$FixInx, list(data$Sub, data$Tr, data$IA), min) #get the
> minimum fix index by Sub, Tr, and IA... I can use this min fix index to pull
> out the desired fixtime
> 
> agg$firstfixtime = 0 # new column for results
> 
> for (rown in 1:length(rownames(agg))){ #cycle through rows and get each
> data$firstfixtime from FixTime in matching rows 
>   agg$firstfixtime[rown] = as.character(data[data$Tr == agg$Group.2[rown] &
> data$Sub == agg$Group.1[rown] & data$IA == agg$Group.3[rown] & data$FixInx
> == agg$x[rown], ]$FixTime)
> }

-- 
Dimitris Rizopoulos
Assistant Professor
Department of Biostatistics
Erasmus University Medical Center

Address: PO Box 2040, 3000 CA Rotterdam, the Netherlands
Tel: +31/(0)10/7043478
Fax: +31/(0)10/7043014




More information about the R-help mailing list