2015-01-07 3 views
3

나는 해킹 할 수있는 매우 간단한 문제가 있지만, R을 사용하여보다 효율적으로 일을 수행 할 수 있습니다. dplyr.이 질문은 아마도 누군가에게 단순하다. 그 패키지에 상당히 좋다.dplyr을 사용한 효과적인 연쇄 화 R

데이터 프레임이 3 열 30 행입니다 (간단히하기 위해). 87 번째 백분위 점수를 계산하고 싶습니다. 그 후, 나는 0과 1 꽤 간단 내의 범위 내에서 해당 점수를 정상화하고 싶습니다 : 정상화 그래서 아래의 두 번째 라인은 dplyr의 힘을 활용한다

enter image description here

통해 이루어집니다 리콜 . 이후

DF <- data.frame(matrix(runif(90, min=0, max=100), ncol=3,nrow=30)) 
DF_87th_percentile <- DF %>% 
    summarise_each(funs(quantile(., c(0.87))) 

, 나는 87 백분위 점수 계산,하지만 나는 어떤 방법이 있나요 넘어와 minmax 변수

min <- apply(DF, 2, min) 
max <- apply(DF, 2, max) 

다음

normalized_score <- (DF_87th_percentile - min)/(max - min) 

만들기를 시작 I dplyr을 사용하여 마지막 부분을 다시 쓸 수 있습니까? 아마 마지막 부분을 묶어서 요? 내 노력은 지금까지 좋지 않았습니다. 사전에 도움을 주셔서 감사합니다.

+0

나는 그가 87 백분위 점수를 정상화하고 싶은 생각을 (3 값)을 가져올 수 있습니다. – Ajar

+0

87 번째 백분위 수 점수를 정규화하고 싶습니다.이 점수를 구간 [0, 1] 내로 변환하십시오. –

답변

2

정규화를 함수로 사용하여 dplyr 체인에서 사용해야합니다.

mynorm <- function(x) { (x - min(x))/(max(x) - min(x)) } 

DF <- data.frame(matrix(runif(90, min=0, max=100), ncol=3,nrow=30)) 

DF %>% 
    summarise_each(funs(quantile(., c(0.87)))) %>% 
    mynorm() 

예 결과 : 예를 들어

X1 X2  X3 
1 0 1 0.986836 
+1

나는'summarize_each (funs (quantile (., c (0.87), na.rm = TRUE)))'. 이제 당신이 작성한 방식대로'na.rm = TRUE'가'c()'에 전달됩니다. – Ajar

+0

나는 이것으로 약간 혼란 스럽다. min과 max는 이제'DF'가 아닌 summary 객체에 대해 계산됩니까? –

+0

네, 맞습니다. 내가 이해하는 바와 같이, 그가하고 싶은 일이다. – Ajar

1
나는 그냥 원래 통화 수정할 수 있다고 생각했을 것이다

:

normalized_score <- DF %>% 
    summarise_each(funs((quantile(., c(0.87))-min(.))/(max(.)-min(.)))) 
normalized_score 
     X1  X2  X3 
1 0.9081882 0.8308022 0.9266201