基于多个变量提取前 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) %>%
作为一行以过滤唯一值。
我知道如何使用 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) %>%
作为一行以过滤唯一值。