Skip to content

Removing rows in dataframe w'o duplicated values

6 messages · AC Del Re, Brad Patrick Schneid, Dennis Murphy +2 more

#
This is ugly, but it gets what you want. 

dat[which(dat[,1] %in% unique((dat[duplicated(dat[,1], fromLast = T),
1]))),]






AC Del Re wrote
--
View this message in context: http://r.789695.n4.nabble.com/Removing-rows-in-dataframe-w-o-duplicated-values-tp4096582p4096672.html
Sent from the R help mailing list archive at Nabble.com.
#
Hi:

Here's one way:

do.call(rbind, lapply(L, function(d) if(nrow(d) > 1) return(d)))
    id value value2
1.1  1     5      1
1.2  1     6      4
1.3  1     7      3
3.5  3     5      4
3.6  3     4      3

HTH,
Dennis
On Tue, Nov 22, 2011 at 9:43 AM, AC Del Re <delre at wisc.edu> wrote:
#
Sorry, you need this first:

L <- split(dat, dat$id)
do.call(rbind, lapply(L, function(d) if(nrow(d) > 1) return(d)))

D.
On Tue, Nov 22, 2011 at 10:38 AM, Dennis Murphy <djmuser at gmail.com> wrote:
#
one approach is the following:

dat <- data.frame(id = c(1,1,1,2,3,3), value = c(5,6,7,4,5,4),
     value2 = c(1,4,3,3,4,3))

ind <- ave(dat$id, dat$id, FUN = length) > 1
dat[ind, ]


I hope it helps.

Best,
Dimitris
On 11/22/2011 6:43 PM, AC Del Re wrote:

  
    
#
On Nov 22, 2011, at 12:43 PM, AC Del Re wrote:

            
> dat[ave(dat$id, dat$id, FUN=length) >1, ]
   id value value2
1  1     5      1
2  1     6      4
3  1     7      3
5  3     5      4
6  3     4      3
David Winsemius, MD
West Hartford, CT