2017-09-17 4 views
1

그룹당 특정 값의 4 분위수로 percentile이라는 변수를 만들고 싶습니다. 나는 다음과 같은 데이터 집합을 가지고 있고, 나는 마지막 변수 percentile를 만들 싶습니다그룹당 특정 값의 4 분위수를 계산하십시오.

id group value 
1 1  1  1 
2 2  1  2 
3 3  1  3 
4 4  1  4 
5 5  2 10 
6 6  2 20 
7 7  2 30 
8 8  2 40 

다음은 예상 된 결과입니다.

id group value percentile 
1 1  1  1 
2 1  2  2 
3 1  3  3 
4 1  4  4 
5 2  10 1 
6 2  20 2 
7 2  30 3 
8 2  40 4 

지금까지 나는 도서관 dplyr 사용하여 다음과 같은 시도 :

df <- df %>% group_by(group) %>% within(df, percentile <- as.integer(cut(value, quantile(value, probs=0:4/4), 
                   include.lowest=TRUE))) 

을하지만 작동하지 않습니다. 이것이 당신이?

> df$percentile = ave(df$value, df$group, FUN=function(x) ecdf(x)(x)) 

재를 필요 어떤 변수라는 백분위을 생산하고도 나에게 오류

+1

'mutate()'사용에 대해 생각해 본지 궁금합니다. – jazzurro

답변

1

를 제공하지 않습니다 당신이 4 원하는 경우 수 :

df$percentile = factor(df$percentile) 
levels(df$percentile) <- 1:4 
+0

충분히 가까워 지지만 관찰 당 4 분위수를 나타내는 변수 quartile을 생성합니다.이 경우 ID는 –

+0

역순으로 작업하는 것이 더 쉽습니다.이 예에서 대답은 @AndresAzqueta – erasmortg

+0

사실입니다. 방금 질문을 업데이트했습니다. 나는 그것이 잘못 작성되었음을 깨달았다. –