2016-10-29 9 views
-2

私は巨根からのデータフレームを持っており、年齢の列からNA値を削除しようとしています。旅客$時代のなぜこのサプリは私のデータフレームでは機能しませんか? (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 
関連する問題