on 07/31/2008 03:20 PM Economics Guy wrote:> I have a large data set where one of the columns needs be a unique
> identifier (ID) for each row. However for a few of the rows they have
> the same ID. What I need to do is randomly draw one of the rows and
> keep it in the data frame and drop all the others which have the same
> ID.
> 
> For example:
> 
> v1 <- c(1,2,3,4,5,6,7)
> v2 <- c(10,20,30,40,50,60,70)
> ID <-
c("A","A","B","B","C","D","E")
> DF <- data.frame(v1,v2,ID)
> 
> But I only need one of the A rows and one of the B rows in the data
> frame. I tried making ID a factor and using apply() to randomly draw
> one but I could not get it to work.
> 
> Any ideas would be greatly appreciated.
> 
> Thanks,
> 
> EG
Try this:
> do.call(rbind, lapply(split(DF, DF$ID), function(x) x[sample(nrow(x), 1),
]))
   v1 v2 ID
A  1 10  A
B  3 30  B
C  5 50  C
D  6 60  D
E  7 70  E
Essentially, I am split()ting DF by ID, randomly selecting one row from 
each ID within lapply() and then rbind()ing it all back together.
BTW, a real name would be appreciated.
HTH,
Marc Schwartz