【发布时间】:2016-01-18 04:05:42
【问题描述】:
使用包 dplyr 和函数sample_frac 可以从每个组中抽取一个百分比。我需要的是先对每个组中的元素进行排序,然后从每个组中选择 top x%?
有一个函数top_n,但是这里只能确定行数,需要一个相对值。
例如以下数据按齿轮分组,每组内按wt排序:
library(dplyr)
mtcars %>%
select(gear, wt) %>%
group_by(gear) %>%
arrange(gear, wt)
gear wt
1 3 2.465
2 3 3.215
3 3 3.435
4 3 3.440
5 3 3.460
6 3 3.520
7 3 3.570
8 3 3.730
9 3 3.780
10 3 3.840
11 3 3.845
12 3 4.070
13 3 5.250
14 3 5.345
15 3 5.424
16 4 1.615
17 4 1.835
18 4 1.935
19 4 2.200
20 4 2.320
21 4 2.620
22 4 2.780
23 4 2.875
24 4 3.150
25 4 3.190
26 4 3.440
27 4 3.440
28 5 1.513
29 5 2.140
30 5 2.770
31 5 3.170
32 5 3.570
现在我想在每个齿轮组中选择前 20%。
如果该解决方案可以与 dplyr 的group_by 功能集成,那就太好了。
【问题讨论】:
-
你不能自己计算百分比吗?我不确定这是否可行,因为我们没有可重现的示例,但我认为它可能:
my_data %>% group_by(my_var) %>% arrange(my_var) %>% filter(top_n()/n() == x%) -
@brittenb 感谢您的帮助!
top_n()不能在没有参数的情况下使用。