2017-04-20 12 views
0

에 의해 분위수를 계산한다(R) :이 같은 DF가 고유 한 행 값의 통일

> df<-data.frame(Client.code = 
c(100451,100451,100523,100523,100523,100525),dayref = c(24,30,15,13,17,5)) 
> df 
    Client.code dayref 
1  100451  24 
2  100451  30 
3  100523  15 
4  100523  13 
5  100523  17 
6  100525  5 

그것은 문제에서 지불 기간 1 년 유통이다.

Usign이 데이터를 상기와 같은 본 DF2 주어진다 : 제가

합리적인 분위수 PROB 충분한 데이터를 가지고
Client.Code Days 
1 100451   16 
1 100523   16 
1 100460   35 

. 나는이 df2의 모든 행에 첫 번째 df에 따른 quantile을 넣는 루프를 만드는 법을 알고 싶다.

+0

'라이브러리 (data.table) 시도 또 다른 인수로 TRUE na.rm을 = 추가 할 수 setDT (DF를) [, quantile (dayref),. (클라이언트. 코드)]' – akrun

답변

0

우리는 그들의 벡터를 추가하여 특정 백분위 수를 지정할 수 있습니다 data.table

library(data.table) 
setDT(df)[, .(Quantile = quantile(dayref)), Client.code] 

또는 tidyverse

library(dplyr) 
library(tidyr) 
df %>% 
    group_by(Client.code) %>% 
    summarise(Quantile = list(quantile(dayref))) %>% 
    unnest 
+0

그것은 작동합니다. 그러나 정말로 유용하지는 않습니다. 내 질문이 충분하지 않았기 때문일 것입니다. 주어진 벡터로 과거 분포를 기반으로 한 quantile을 지정할 수 있습니다. 감사합니다 –

+0

@ ÁlvaroRodríguez 다른 조건이있을 경우 질문을 업데이트하거나 새로운 질문을 만들 수 있습니까 – akrun

+0

지금 편집되었습니다. –

0
tapply(df$dayref, df$Client.code, quantile) 

와 함께 사용할 수있는

tapply(df$dayref, df$Client.code, quantile, 1:19/20) 

당신이

tapply(df$dayref, df$Client.code, quantile, probs = 1:19/20) 

처럼 공식화해야합니다 그리고 당신의 NA가있을 경우

+0

과 같은 것을 할 수 있습니다. 훌륭한 솔루션. 관심있는 경우 두 가지 질문이 있습니다. 1) xlsx에이 배열을 쓰는 방법. 2) 주어진 수의 벡터와 연관된 quantile을 표현할 수있는 루프, 더 쓰기 가능 –