基于多个变量提取前 N 个值

Extract top N values base on multiple variables

我知道如何使用 plyr (ddply) 提取前 N 个值,如下所示,但这是基于基于一个变量的排序和提取...我想基于两个变量提取。我该怎么做?

例如

rats<- read.table("http://vincentarelbundock.github.io/Rdatasets/csv/KMsurv/rats.csv", header=TRUE, sep=",", na.strings="NA", dec=".", strip.white=TRUE)
top = ddply(rats, .(litter), function(x) data.frame(reads=tail(sort(x$time),1)))

上面的脚本非常适合提取每窝垃圾的最高值,但是如果我想通过处理(rx 列)获得每窝垃圾的最高值怎么办?

非常感谢任何帮助。

这会产生垃圾和 rx 的每个组合的最高时间值:

library(dplyr)
rats %>%
  group_by(litter, rx) %>% # group
  arrange(-time) %>% # sort
  slice(1) # take top 1 row per subgroup


Source: local data frame [100 x 5]
Groups: litter, rx

    X litter rx time status
1   3      1  0  104      0
2   1      1  1  101      0
3   6      2  0  104      0
4   4      2  1  104      0
5   8      3  0  104      0
6   7      3  1  104      0
7  11      4  0   97      0
8  10      4  1   77      0
9  14      5  0  104      0
10 13      5  1   89      0
.. ..    ... ..  ...    ...

您的问题标题为 "Top N" - 如果您想要的不仅仅是前 1 个,请在 slice() 调用中调整该参数。

处理关系:如果子组内存在关系(如在该数据集中)并且您希望 Top-N 其中 N > 1,这将 return 具有相同时间值的记录。对于前 N 个 unique 值,您可以在 group_by 之后添加 distinct(time) %>% 作为一行以过滤唯一值。