2016-10-29 3 views
-2

나는 거대한 kaggle에서 데이터 프레임을 가지고 나이 열에서 NA 값을 제거하려고합니다. 승객 $의 시대왜 내 데이터 프레임에서이 sapply가 작동하지 않습니까? (titanic kaggle)

오류 : 이렇게하려면, 나는 다음과 같은 오류가 나타날 수

df.train <- read.csv('data/titanic_train.csv') 


fixe.age <- function(passenger){ 
    returnedage <- passenger$Age 
    if(is.na(returnedage)==T){ 
    if(passenger$Pclasse==1){ 
     returnedage <- 37 
    } 
    else if(passenger$Plasse == 2){ 
     returnedage <-29 
    } 
    else{ 
     returnedage <- 24 
    } 
    } 
    else{ 
    returnedage <- passenger$Age 
    } 
    return(returnedage) 
} 

sapply(df.train, fixe.age) 

다음 코드를 시도 $ 연산자는 원자 벡터

에 대한 잘못된 길인가 이 일을 완전히 잘못하려는거야?

덕분에 많은

답변

2

sapply 모든 열 데이터 프레임의에 함수를 적용하기 때문에 그것은 작동하지 않습니다, 당신은 행에 적용하려고합니다. 제안하고자하는 것을 구현하려면 apply(margin = 1)이 필요합니다.

그러나 대부분의 기능이 R로 벡터화되어 있기 때문에 주된 문제는 입니다.에 대한 루프가 필요하지 않습니다 (The R Inferno의 3 부 참조). 다음 코드가 작동해야합니다.

df.train$returnedage <- df.train$Age 
df.train$returnedage[is.na(df.train$Age)] <- 24 
df.train$returnedage[is.na(df.train$Age) & passenger$Pclasse==1] <- 37 
df.train$returnedage[is.na(df.train$Age) & passenger$Pclasse==2] <- 29 
관련 문제