2013-04-07 1 views
1

다음은 내가하려는 일의 쉬운 버전입니다. 나는 다음과 같은 벡터가 :2 개 이상의 인수가있는 조건에서 변수 만들기

wage = 1:10 # Generate a sequence from 1 to 10 

을 그리고 또 다른 벡터를 생성 할 wage_level 같은 것을 :

(I) wage_level"low"입니다 wage 미만 5

(II) wage_levelnormal 경우 경우 wage5

(iii) wage_levelwage 경우 high은 앞에서 지적했듯이 나는, 그러나, 나는 그것을 할 중첩 ifelse 문을 사용할 수있어 더 큰 5

보다, 이것은하지만 난 정말 내가 약 15 대안을 가지고 있기 때문에 수행 할 작업의 단순화 된 버전 .

편집

아래에 제공된 대답은 실제로 많은 경우에서 잘 작동 cut() 기능을 사용한다. 그러나, 그것은 내 경우에는 "작동"하지 않는 것 같습니다. 다음은 자세한 설명입니다. 의 내가 cut() 기능을 사용하여 다른 벡터합니다 (rating 벡터를) 만들 수 wage_level 벡터를 사용한다고 가정하자, 이제

wage = runif(10, 1, 10) # Randomly generate 10 values between 1 and 10 

# Here I use the cut() function 
wage_level = cut(wage, 
       breaks = c(1, 4, 6, 10), 
       labels = c("low", "normal", "high"), 
       include.lowest = TRUE) 
> wage 
[1] 5.522422 4.793292 8.161671 5.480415 1.396909 3.403013 4.940242 7.762142 6.364159 4.603998 

> wage_level 
[1] normal normal high normal low low normal high high normal 
Levels: low normal high 

:

은 내가 wage_level 벡터를 만들 수 cut() 기능을 사용할 수 있었다. 다음과 같이 rating 벡터를 생성하기위한 조건은 다음

(I) rating"1" 경우 wage_level 미만 "low"

(II) rating는 동일하다 2wage_level 경우이다 "normal"

(III) rating3wage_level"high보다 큰 경우

내 문제는 t입니다. 모자를 사용하여 cut() 기능을하지 않습니다 rating 벡터 numeric 벡터는 내 선택의 가치 것입니다. 다음 코드는 작동하지 않습니다

rating = cut(as.numeric(wage_level), 
       breaks = c(0, 1, 2, 3), 
       labels = c(1.2, 6.5, 8.9), 
       include.lowest = TRUE) 

> as.numeric(rating) 
[1] 2 2 3 2 1 1 2 3 3 2 

내가 주로 여기에 두 가지 문제가 있습니다

(내가) 내가 실제 문자열 (예를 사용하는 방법을 선호하는 것 "저" ","normal "와 높음 ")

(ii) rating 벡터의 값은 지정한 값과 아무 관계가 없습니다.

원하는 결과를 얻기위한 다른 방법은 없습니까?

는 당신의 도움을 주셔서 대단히 감사합니다 :) 벡터가

+1

아마도'cut()'을 찾고있을 것입니다. – ndoogan

+1

@ndoogan이 자리하고 있습니다. 많은 양의 간격을두고 작업하는 것을 발견했습니다.'breaks '와'labels'을 자체 변수로 사용하는 것이 도움이됩니다. 종종'seq'와'paste0'로 생성됩니다. –

+0

@ndoogan 제발, 제 편집했습니다. 질문 좀 해봐 줄래? – SavedByJESUS

답변

4
wage<-1:10 
cut(wage,breaks=c(0,4,5,10),include.lowest=T,labels=c("low","normal","high")) 
# [1] low low low low normal high high high high high 
#Levels: low normal high 

을 주문하지 않는 경우는 어떻게? 차이 없음 :

wage <- runif(10,1,10) 
wage 
# [1] 8.535146 4.964819 7.228050 9.150132 6.369952 8.451137 8.022293 7.621226 
# [9] 1.070368 5.931904 

cut(wage,breaks=c(0,4,5,10),include.lowest=T,labels=c("low","normal","high")) 
# [1] high normal high high high high high high low high 

비록, 당신이 실수로 작업 정말있어 경우 normal 요소는 정확히 5 이상한 선택이 될 수 있습니다에 대한 다음 찾고, 4와 5 사이의 값에 적용되는 것을 알 수 있습니다.

+0

답장을 보내 주셔서 대단히 감사합니다. @ndoogan. 이것은 매우 도움이됩니다. 그러나 데이터가 예제와 같이 늘어나는 순서로 정렬되지 않으면 어떻게해야합니까? 'wage = runif (10, 1, 10)'이라면 어떨까요? – SavedByJESUS

+1

왜 그렇게 생각하세요? – themel

+1

@SavedByJESUS ​​나는 themel에 동의한다. 그것을 시도하고 볼 수 있습니다. 그것은 잘 작동합니다. – ndoogan