2017-12-12 5 views
1

예를 들어 여러 필드를 다시 코딩하고 싶습니다. 성별, 결혼 상태, 예를 들어 숫자에 대한 교육. male=1, female=2 & 그래서한 문자로 모든 문자 변수를 다시 코딩하는 함수를 만듭니다.

convert <- function(x,y,z) 
{ 
    if(x[[y]]==z) { 
    x$y=as.factor(1) 
    } else { 
    x$y=as.factor(2) 
    } 
} 
train$Gender <- convert(train,Gender,“Male”) 

에하지만이 .subset2에서 오류를

오류가 발생합니다 (X, I, 정확한 = 정확한) 수준에서 같은 인덱스입니다.

어떤 사람이 도와 줄 수 있습니까?

+1

가'X, Y에 대한 예를 제공하십시오, –

+0

을 z' y'가 계산'당신은'$의 y'를 사용할 수 없으며, 리터럴 이름 "y"대신에 값을 사용하려고합니다. 대신'x [[y]] <- ...'를 사용하십시오 (마치'if' 문에서했던 것처럼). – JDL

+0

@JDL 여전히 동일한 오류가 발생합니다 – New2015

답변

0

이 될 것 시도한 변환을위한 간단한 솔루션 : 당신은 그냥 숫자 수준에 문자열 수준으로 요소를 변환 할 경우

df <- data.frame(Gender = c("male", "male", "female", "male")) 

convert <- function(data, var, label){ 
    data[,var] <- ifelse(is.na(data[,var]), NA, 
          ifelse(data[,var] == label, 1, 2)) 
    return(as.factor(data[,var])) 
} 

df$Gender <- convert(df, "Gender", "male") 

> df 
    Gender 
1  1 
2  1 
3  2 
4  1 

, 당신은 등을 위해 그것을 할이 간단한 명령을 사용할 수 있습니다 당신이 한 번에 원하는만큼 많은 변수 :

예 데이터 :

df <- data.frame(var1 = factor(sample(1:5, 10, replace = TRUE), 1:5, labels = LETTERS[1:5]), 
       var2 = factor(sample(1:5, 10, replace = TRUE), 1:5, labels = LETTERS[6:10]), 
       var3 = factor(sample(1:5, 10, replace = TRUE), 1:5, labels = LETTERS[11:15])) 

> df 
    var1 var2 var3 
1  B F O 
2  A F M 
3  D F N 
4  E F O 
5  B H N 
6  B F M 
7  A F O 
8  E I O 
9  C J N 
10 E J O 

지금 변경하려는 컬럼을 통해 루프 lapply을 사용하고, 01을 사용 239,먼저 숫자 수준 요인의 뒤쪽으로, 숫자로 변환 :

df[, c("var1", "var2")] <- lapply(df[, c("var1", "var2")], function(x) as.factor(as.numeric(x))) 

> df 
    var1 var2 var3 
1  2 1 O 
2  1 1 M 
3  4 1 N 
4  5 1 O 
5  2 3 N 
6  2 1 M 
7  1 1 O 
8  5 4 O 
9  3 5 N 
10 5 5 O 

> class(df$var1) 
[1] "factor" 
+0

솔루션 주셔서 감사합니다 그래서 변환 할 변수를 먼저 vectorized하고 "ifelse"를 적용해야합니다 – New2015

+0

나는 함수를 줄였습니다. 임시 벡터는 필요하지 않았습니다. 차이는별로 없지만 대용량 데이터의 경우 더 빠를 수 있습니다. 이것은 두 단계의 요소에 대해서만 작동합니다. – LAP

+0

예 나는 똑같은 & 그 이유는 내가 "& ifelse"대신에 if & else를 사용하는 것에 열중하고있는 이유입니다. 여러 수준의 변수를 처리하는 가장 좋은 방법은 무엇입니까? – New2015