2017-09-26 160 views
1

假設我有下一個數據幀。數據幀過濾值

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

所有你正在做的是'dplyr :: GROUP_BY(表,計劃,價格)%>%dplyr ::片(1)',只能自認倒黴 「最高價」 。有什麼我失蹤? – r2evans

+0

@ r2evans對於這個特定的例子它的作品。但是,假設每個「計劃」中的重複價格都不是最大值。你的代碼不會給出想要的結果。雖然目前還不清楚OP是否希望保留不是最大的重複或者價格是否未經排序。 – useR

+0

我覺得我推斷得太多了,好點。 – r2evans

回答

0

可以在dplyr使用slice

library(dplyr) 

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

which.max給出price == max(price)中第一次出現的索引。使用這一點,我可以slice data.frame只保留每個​​行的最高價格。

結果:

# 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