[R] unique, but keep LAST occurence

Marc Schwartz (via MN) mschwartz at mn.rr.com
Mon Jul 24 19:14:23 CEST 2006


On Mon, 2006-07-24 at 12:00 -0500, davidr at rhotrading.com wrote:
> ?unique says
> 
> Value:
> 
>      An object of the same type of 'x'. but if an element is equal to
>      one with a smaller index, it is removed.
> 
> However, I need to keep the one with the LARGEST index.
> Can someone please show me the light? 
> I thought about reversing the row order twice, but I couldn't get it to work right
> 
> (My data frame has 125000 rows and 7 columns, 
> and I'm 'uniqueing' on column #1 (chron) only, although the class of the column may not matter.)
> 
> Say, e.g., 
> > DF <- data.frame(t = c(1,2,3,1,4,5,1,2,3), x = c(0,1,2,3,4,5,6,7,8))
> 
> I would like the result to be (sorted as well)
>  t x
>  1 6
>  2 7
>  3 8
>  4 4
>  5 5
> 
> If I got the original rownames, that would be a bonus (for debugging.)

Does this get it?

> DF[sapply(unique(DF$t), function(x) max(which(DF$t == x))), ]
  t x
7 1 6
8 2 7
9 3 8
5 4 4
6 5 5


HTH,

Marc Schwartz



More information about the R-help mailing list