2017-04-22 3 views
1

상위 30 %, 중간 40 % 및 하위 30 %에 따라 특정 변수 (코드에서 wt_avg라고 함)를 작성하려고합니다. 예를 들어R Quantile Error - 대체 행이 n 개이고 데이터에 p가 있습니다

-

"x"는 데이터와 "클래스"입니다
structure(list(x = 1:10, class = c(1, 1, 1, 2, 2, 2, 2, 3, 3, 
3)), .Names = c("x", "class"), row.names = c(NA, -10L), class = "data.frame") 

내가 원하는 출력입니다. 나는 다음과 같은 오류 얻을

sent_data$wt_avg = with(sent_data, SENT_Orth_1 + SENT_Orth_2 + SENT_Orth_3) 
sent_data$state = quantile(sent_data$wt_avg, probs = c(0, 0.3, 0.7, 1) 
      na.rm = TRUE) 

- -

내가 사용하고있는 코드입니다

오류 $<-.data.frame (*tmp*, "상태"에서, 값 =의 C (-13.38, -2.9725를 : 교체 5 개 행이 데이터는 내가이? 감사를 해결할 수있는 방법 (603)

있다!

+0

'quantile'의 출력은 약간 다릅니다. 초기 벡터와 다른 길이의 출력을 반환합니다. 즉,'quantile (1:10, c (0, 0.3, 0.7, 1)) # 0 % 30 % 70 % 100 % 1.0 3.7 7.3 10.0' 저장할 수 있습니다. 새 열 대신 요약 된 데이터 세트로 – akrun

+0

아 좋아! 그런 다음 'if'조건을 사용하여 분류 할 "상태"변수를 실제로 만들어야합니다. 더 빠른 방법이 있습니까? 감사! –

+0

재생 가능한 예제와 예상 출력을 추가하지 않아서 죄송합니다. 지금 내 질문을 편집했습니다. –

답변

1

우리는 cutquantile을 사용할 수 있습니다 또는 findInterval

sent_data$newclass <- with(sent_data, findInterval(x, quantile(x, 
     probs = c(0, 0.3, 0.7, 1)), rightmost.closed = TRUE)) 
sent_data 
# x class newclass 
#1 1  1  1 
#2 2  1  1 
#3 3  1  1 
#4 4  2  2 
#5 5  2  2 
#6 6  2  2 
#7 7  2  2 
#8 8  3  3 
#9 9  3  3 
#10 10  3  3