数据框过滤器值

时间:2017-09-26 17:48:44

标签: r

假设我有下一个数据框。

table<-data.frame(group=c(0,5,10,15,20,25,30,35,40,0,5,10,15,20,25,30,35,40,0,5,10,15,20,25,30,35,40),plan=c(1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3),price=c(1,4,5,6,8,9,12,12,12,3,5,6,7,10,12,20,20,20,5,6,8,12,15,20,22,28,28))

   group plan price
1      0    1     1
2      5    1     4
3     10    1     5
4     15    1     6
5     20    1     8
6     25    1     9
7     30    1    12
8     35    1    12
9     40    1    12
10     0    2     3
11     5    2     5
12    10    2     6
13    15    2     7
14    20    2    10
15    25    2    12
16    30    2    20
17    35    2    20
18    40    2    20

如何从表格中获取最高价格的值,而不重复。

结果将是:

group plan price
1      0    1     1
2      5    1     4
3     10    1     5
4     15    1     6
5     20    1     8
6     25    1     9
7     30    1    12
10     0    2     3
11     5    2     5
12    10    2     6
13    15    2     7
14    20    2    10
15    25    2    12
16    30    2    20

1 个答案:

答案 0 :(得分:0)

您可以在slice中使用dplyr

library(dplyr)

table %>%
  group_by(plan) %>%
  slice(1:which.max(price == max(price))) 

which.max给出第一次出现price == max(price)的索引。使用它,我可以slice data.frame只保留每个plan的行,直到达到最高价格。

<强>结果:

# A tibble: 22 x 3
# Groups:   plan [3]
   group  plan price
   <dbl> <dbl> <dbl>
 1     0     1     1
 2     5     1     4
 3    10     1     5
 4    15     1     6
 5    20     1     8
 6    25     1     9
 7    30     1    12
 8     0     2     3
 9     5     2     5
10    10     2     6
# ... with 12 more rows