为什么这个sapply没有在我的数据框架上工作? (泰坦尼克号)

时间:2016-10-29 16:43:13

标签: r dataframe sapply kaggle

我有来自泰坦尼克号的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)

我收到以下错误:

  

乘客误差$年龄:$运算符对原子矢量无效

我试图完全错误的方式是什么?

非常感谢

1 个答案:

答案 0 :(得分: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