2017-09-26 2 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 

테이블에서 값을 중복하지 않고 어떻게 얻을 수 있습니까?

그래서 결과는 다음과 같습니다 당신은 dplyrslice을 사용할 수 있습니다

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

:

library(dplyr) 

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

which.maxprice == 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 
관련 문제