2017-01-28 8 views
1

내 변수의 특이점을 제거해야합니다. 변수의 상위 10 %를 줄이려고합니다. 그러나 어떤 상위 10 %인지 알아내는 데는 단서가 없습니다. 30에서 랜덤 커팅을하면 상위 3.45 %가됩니다.R - 벡터의 상위 x %를 제거하는 방법

dat$T102_01[dat$T102_01 < 30] 

값을하려면 r을 말할 수있는 방법이 있습니까 < 30 만 값의 첫 번째 90 %?

콘텐츠 기반 결정을 내리고 싶지 않으므로 (30 세 이상은 비현실적입니다.) 내가 분석 한 모든 변수의 상위 10 %를 차지하는 것이 좋습니다.

나는 내 음모의 그림을 추가 할수 없어

죄송합니다 의견에 대해 매우 감사 할 것입니다. 분포가 비대칭이며 대부분의 값은 0 ~ 30 사이, 매우보기 값은 30 ~ 100

+3

당신이 사용할 수있는'는 %의 커트 포인트를 얻을 수 quantile' 다음 당신의 벡터를 부분 집합?. 예 :'x = 20 : 1; cutpoint = quantile (x, p = 0.9); x [x user20650

답변

0

사이에 당신은 sort을 수행하여이 작업을 수행하고 그것을 통해 값을 길의 90 %를 찾을 수 있습니다

vec <- rnorm(1000) 

cut <- sort(vec)[ round(length(vec) * 0.9) ] 

vec <- vec[ vec < cut ] 

그래서 우리는 벡터를 정렬하고 벡터를 통과하는 점의 90 % 지점에서 값을 cut 점으로 취합니다. 그런 다음 cut 지점을 사용하여 주 벡터의 하단 90 % 만 가져옵니다. 다음과 같이

2

은 내가 분위수 기능을 사용 :

x <- rnorm(50) 
p90 <- quantile(x = x,probs = .9) 
want <- x[x<p90]