2013-08-06 4 views
1

나는 숫자가 다음과 같은 벡터를 가지고 있습니다 : c(52.2,76.3,16.1,85.8). seq(15,90,5)의 각 간격이 거짓인지 결정하고 특정 간격/카테고리를 나타내는 숫자로 새 벡터를 만듭니다.많은 카테고리가있는 ifelse 문

다음 기능은 작동하지만 다소 복잡해 보이므로 누군가가 나를보다 효율적으로/간결하게 만들 수 있도록 도와 줄 수 있습니다.

testfun <- function(x){ 
ifelse(x>=15 & x<20, 1, ifelse(x>=20 & x<25, 2, ifelse(x>=25 & x<30, 3, 
ifelse(x>=30 & x<35, 4, ifelse(x>=35 & x<40, 5, ifelse(x>=40 & x<45, 6, 
ifelse(x>=45 & x<50, 7, ifelse(x>=50 & x<55, 8, ifelse(x>=55 & x<60, 9, 
ifelse(x>=60 & x<65, 10, ifelse(x>=65 & x<70, 11, ifelse(x>=70 & x<75, 12, 
ifelse(x>=75 & x<80, 13, ifelse(x>=80 & x<85, 14, ifelse(x>=85 & x<90, 15, 
ifelse(x>=85 & x<90, 16, NA))))))))))))))))} 

> testfun(c(52.2,76.3,16.1,85.8)) 
[1] 8 13 1 15 

많은 감사!

ps. labels를이 질문/제목

답변

6

사용 cut을 편집하고 할당 할 주시기 바랍니다 : 완벽하게 작동

x <- c(52.2,76.3,16.1,85.8 , 90)  
cut(x , breaks = seq(15,90,5) , labels = c(1:15) , include.lowest = TRUE) 
#[1] 8 13 1 15 
#Levels: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 
+0

완벽하게 작동합니다. 감사합니다. – Rob

4
You can use `cut` for example 

as.numeric(cut(c(52.2,76.3,16.1,85.8), breaks = seq(15,90,5))) 

[1] 8 13 1 15 
+0

, 감사합니다! – Rob

+0

안녕하세요 @jdharrison, [lapply-ing with the "$"function;] (http://stackoverflow.com/questions/18216084)에서 답변에 달린 댓글에 댓글을 달고 싶었으나 이제 삭제되었습니다. 나는 그것이 OP의 실제 질문에 확실히 대답하지는 않았지만 좋은 시도 였고 어떤 사람들이 준 공격에 대한 자격이 없다고 생각했다. 나는 그 공격이 당신의 것에 대한 농담으로 되었기를 바란다.) 여기에 일반적으로 우호적 인 사람들이지만, 어느쪽으로 든, 당신이 낙담하지 않고 계속해서 StackOverflow에 참여하기를 희망한다. – Aaron

+0

lol @ Aaron no offense 촬영되었습니다. 나는 나의 대답을 확장했을 것이다. 그러나 사람들은 의견에서 그것을 아주 잘 감추고 있었고 그래서 누군가가 더 완전한 대답을 쓸 수 있도록 대답을 철회하는 것이 가장 좋았다. – jdharrison