为什么这不适用于我的数据框? (泰坦尼克号)

Why is this sapply not working on my data-frame? (titanic kaggle)

我有来自 titanic kaggle 的数据框,我尝试从年龄列中删除 NA 值。为此,我尝试了以下代码

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)

我收到以下错误:

Error in passenger$Age : $ operator is invalid for atomic vectors

我尝试这样做的方式完全错误吗?

非常感谢

它不起作用,因为 sapply 将函数应用于数据框的所有 ,而您正试图将其应用于行。要实施您的建议,您需要 apply(margin = 1).

但主要问题是你不需要循环,因为大多数函数都在 R 中矢量化(见第 3 章The R Inferno) .以下代码应该有效:

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