2014-09-23 4 views
1

R에서 if-else 문을 사용하는 것이 처음입니다. 데이터 프레임에 'Performance'라는 이름의 열이 있습니다 (일부는 예상치 임). 'Performance'열의 마지막 문자를 사용하는 'Estimate'라는 새 열을 만들었습니다. 이제 'Estimate'= '*'인 경우 'Estimate'= '예'else 'Estimate'= 'NO'. 새 열 이름을 'Estimate'로 유지하기 만하면됩니다. 필자가 작성한 문은 작동하지만 다음과 같은 오류 메시지가 나타납니다.Else Statement in R 오류 메시지

"경고 메시지 : if (data.set $ Estimate =="* ") {: 상태가 길이> 1이고 나는이 오류 메시지를 받고있는 이유

data.set$Estimate <- if (data.set$Estimate == '*') {data.set$Estimate = 'YES'} else{data.set$Estimate = 'NO'} 

누군가가 설명해 주시겠습니까 및/또는 내가하지으로 변경해야 할 것이 무엇 : 첫 번째 요소는 여기

내 문은 "사용됩니다 그것? 어떤 도움이라도 대단히 감사합니다.

+0

당신이 SO에이 오류를 검색 했습니까? 이것에 대한 답은 이미 수백 가지가 있습니다. –

답변

0

견적 열에 "*"가 포함 된 항목이 두 개 이상 있습니다. 문은 같은 하나 개의 논리적 요소를 사용한다면 :

any(data.set$Estimate=="*") 

그리고 당신이 * 한 enteries을 대체 할 것으로보고 "YES"당신은 실제로없는 경고를 들어

my.fun1<-function(x) 
     { 
      ifelse(x=="*","YES","NO") 
     } 
data.set$Estimate<-sapply(data.set$Estimate,my.fun1) 
0

을 사용할 수 있습니다 일. 단일 if 문은 단일 부울을 기대하지만 데이터 $ Estimate (벡터)와 "*"(단일 요소)를 비교하려고합니다. 따라서 경고에서 정확히 말한대로 데이터 $ Estimate의 첫 번째 요소 만 가져옵니다. 귀하의 생각 프로세스가 좋았으며, 구현에 큰 타격을 입지 않았습니다!

ifelse()는 벡터화 (즉, 부울 값의 벡터)를 허용하므로 if-else가해야한다고 생각하는 것을 수행합니다. 이 경우에는 sapply가 필요하지 않습니다. 벡터화 만하면됩니다.

데이터 $ 예상하여 아래 VECT 대체

vect<-c("*", "X", "*", "*", "10YEAH", "WHAT", "BlurbBlurb") 
vect<-ifelse(vect=="*","Yes", "No") 
vect 

#[1] "Yes" "No" "Yes" "Yes" "No" "No" "No"