[R] Aggregate by minimum

jim holtman jholtman at gmail.com
Tue Jan 10 03:00:58 CET 2012


try this:

> x <- structure(list(speed = c(3,9,14,8,7,6), result = c(0.697, 0.011, 0.015, 0.012, 0.018, 0.019), house = c(1,
+ 1, 1, 1, 1, 1), date = c(719, 1027, 1027, 1027, 1030, 1030),
+    id = c("1000", "10000",
+    "10001", "10002", "10003", "10004")), .Names = c("speed",
+ "result", "house", "date", "id"), class = "data.frame", row.names = c("1000",
+ "10000", "10001", "10002", "10003", "10004"))
>
> require(plyr)
> ddply(x, .(date), .fun = function(a){
+     a[which.min(a$speed), ]
+ })
  speed result house date    id
1     3  0.697     1  719  1000
2     8  0.012     1 1027 10002
3     6  0.019     1 1030 10004
>
>

On Mon, Jan 9, 2012 at 8:23 PM, Jeffrey Joh <johjeffrey at hotmail.com> wrote:
>
>
>
>
> For each date, I would like to keep the line with the lowest speed and discard the rest.  The result would have one line for each date.  Can I use aggregate for this?
>
> My table is as follows:
> structure(list(speed = c(3,9,14,8,7,6), result = c(0.697, 0.011, 0.015, 0.012, 0.018, 0.019), house = c(1,
> 1, 1, 1, 1, 1), date = c(719, 1027, 1027, 1027, 1030, 1030),
>    id = c("1000", "10000",
>    "10001", "10002", "10003", "10004")), .Names = c("speed",
> "result", "house", "date", "id"), class = "data.frame", row.names = c("1000",
> "10000", "10001", "10002", "10003", "10004"))
>
> Thanks,
> Jeffrey
>
>
>        [[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
Data Munger Guru

What is the problem that you are trying to solve?
Tell me what you want to do, not how you want to do it.



More information about the R-help mailing list