2013-07-19 2 views
1

R에 하나의 코드를 쓰고 있습니다. 먼저 데이터 세트에 하나의 빈 컬럼을 만들고 일부 조건에 따라 그 컬럼에 0과 1 값을 할당하고 싶습니다. 여기에 내 코드만약에 else 루프가 R에있는 경우

#Creating a empty column in the data file 
Mydata$final <- ""; 

#To assign 0,1 value in final variable 
if(Mydata$Default_Config == "No" & is.na(Mydata$Best_Config)=="TRUE" & (Mydata$AlmostDefaultConfig!=1 | Mydata$AlmostDefaultConfig!=3)){ 
    Mydata$final <- 1 
    }else{ 
    Mydata$final <- 0 
    } 

이다 그리고이 오류가 난이 오류를 해결 수있는 방법

Warning message: 
In if (Mydata$Default_Config == "No" & is.na(Mydata$Best_Config) == : 
    the condition has length > 1 and only the first element will be used 

는 무엇입니까? 제발 도와주세요. 미리 감사드립니다.

+0

안녕하세요, 여기에서 상대적으로 새롭기 때문에 [** about **] (http://stackoverflow.com/about) 및 [** faq **] (http : //stackoverflow.com/faq) 어떻게 작동하는지. StackOverflow는 문제를 해결하는 답변을 받으면 작은 체크 표시를 클릭하거나 유용한 대답을 upvote하여 수락하면 모든 사람에게 훨씬 더 가치가 있습니다. 당신은 절대적으로 어느 쪽도 할 의무가 없습니다. 그러나 대답이 사실상 당신의 문제를 해결했다면 사이트에 "되돌려주는"좋은 방법입니다. 감사! –

답변

0

문제는 벡터화 중 하나입니다. if은 벡터화되지 않습니다. if 문에서 각 비교에서 여러 값을 테스트하고 있으며 if이 벡터화되지 않았기 때문에 R이 첫 번째 값만 사용한다고 알려줍니다.

다음은 재현 가능한 예입니다. x도 다음 1를 반환한다 > 5 y 경우 그렇지 0을 반환 :

x <- 1:10 
# [1] 1 2 3 4 5 6 7 8 9 10 

y <- seq(1,30,3) 
# [1] 1 4 7 10 13 16 19 22 25 28 

x > 5 
# [1] FALSE FALSE FALSE FALSE FALSE TRUE TRUE TRUE TRUE TRUE 

y %% 2 == 0 
# [1] FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE 

ifelse(x > 5 & y %% 2 == 0 , 1 , 0) 
# [1] 0 0 0 0 0 1 0 1 0 1 
0

다른 방법이 R의 강압을 활용하는 것입니다. 당신은 벡터화있는 조건문 세트를 가지고 있고, R 1/0 FALSE/TRUE 변환 행복하다, 그래서 당신은 그것을 좋아 작성할 수 있습니다

Mydata$final <- ( (Mydata$Default_Config == "No") *(is.na(Mydata$Best_Config)=="TRUE") * (Mydata$AlmostDefaultConfig!=1 + Mydata$AlmostDefaultConfig!=3)) ) 

(명확성을 위해 추가 된 여분의 괄호). 거기에 논리가 더럽 으면 사과드립니다.

편집 : 양면이 TRUE이면 큰 숫자 ("2":-))를 얻을 수 있기 때문에 OR 코드가 제대로 작동하지 않습니다. as.logical((Mydata$AlmostDefaultConfig!=1 + Mydata$AlmostDefaultConfig!=3))