[R] split-apply question

David Winsemius dwinsemius at comcast.net
Fri Oct 2 14:34:56 CEST 2009


As is typical with R there are often other ways. Here is another  
approach that determines the rows of interest with tapply and min,  
converts those minimums into logical "targets" with %in%, and extracts  
them from "x" using indexing:

x[x$x2 %in% tapply(x$x2, x$x1, min), ]

########
   x1 x2  x3
1  A  1 1.5
2  B  2 0.9
4  C  7 1.8
5  D  7 1.3

You might want to determine whether both would return all rows if  
there were multiple instances of a minimum. I think the above solution  
would return multiples while the one below would not. You choose based  
on the nature of the problem.

-- 
David


On Oct 2, 2009, at 5:24 AM, jim holtman wrote:

> try this:
>
>> x <- read.table(textConnection("x1  x2  x3
> + A   1    1.5
> + B   2    0.9
> + B   3    2.7
> + C   7    1.8
> + D   7    1.3"), header=TRUE)
>> closeAllConnections()
>> do.call(rbind, lapply(split(seq(nrow(x)), x$x1), function(.row){
> +     x[.row[which.min(x$x2[.row])],]
> + }))
>  x1 x2  x3
> A  A  1 1.5
> B  B  2 0.9
> C  C  7 1.8
> D  D  7 1.3
>>
>
>
> On Thu, Oct 1, 2009 at 11:43 PM, Kavitha Venkatesan
> <kavitha.venkatesan at gmail.com> wrote:
>> Hi,
>>
>> I have a data frame that looks like this:
>>
>>> x
>>
>> x1  x2  x3
>> A   1    1.5
>> B   2    0.9
>> B   3    2.7
>> C   7    1.8
>> D   7    1.3
>>
>> I want to "group" by the x1 column and in the case of multiple x$x1  
>> values
>> (e.g., "B")d, return rows that have the smallest values of x2. In  
>> the case
>> of rows with only one value of x1 (e.g., "A"), return the row as  
>> is. How can
>> I do that?  For example, in the above case, the output I want would  
>> be:
>>
>> x1  x2  x3
>> A   1    1.5
>> B   2    0.9
>> C   7    1.8
>> D   7    1.3
>>
>>
>> Thanks!
>>
>>        [[alternative HTML version deleted]]
>>
>> ______________________________________________
>> R-help at 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.
>>
>
>
>
> -- 
> Jim Holtman
> Cincinnati, OH
> +1 513 646 9390
>
> What is the problem that you are trying to solve?
>
> ______________________________________________
> R-help at 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.




More information about the R-help mailing list