On 2011-04-23 07:02, David Winsemius wrote:

On Apr 23, 2011, at 9:05 AM, - - wrote:

I have a table.
First column is a date, second column is an index and other columns
contains some other values.
I want to remove, for each date, the row with the smallest index (it
is not necessarily 1).

ex: in the following table, I want to remove row 1 (2013-05-12 with
index 2) and row 8 (2013-05-13 with index 1)

            day index values
1    2013-05-12    2  xxxx
2    2013-05-12    3  xxxx
3    2013-05-12    4  xxxx
4    2013-05-12    5  xxxx
5    2013-05-12    6  xxxx
6    2013-05-12    7  xxxx
7    2013-05-12    8  xxxx
8    2013-05-13    1  xxxx
9    2013-05-13    3  xxxx
10   2013-05-13    4  xxxx
11   2013-05-13    5  xxxx
12   2013-05-13    6  xxxx
13   2013-05-13    7  xxxx
14   2013-05-13    8  xxxx
15   2013-05-13    9  xxxx
16   2013-05-13   10  xxxx
17   2013-05-13   12  xxxx


Consider using ave and creating a logical vector that you then negate:

  >  ave(dat$index, list(dat$day), FUN=function(x) x==min(x))
   [1] 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0

dat[ -ave(dat$index, list(dat$day), FUN=function(x) x==min(x)), ]

ave() is one of those really handy functions, but I think
that you meant

 dat[ !ave(dat$index, list(dat$day), FUN=function(x) x==min(x)), ]

Here's another way, using the plyr package

 require(plyr)
 ddply(dat, .(day), .fun = function(x) subset(x, index != min(index)))

Peter Ehlers

--

David Winsemius, MD
West Hartford, CT

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to