【问题标题】:Why is this sapply not working on my data-frame? (titanic kaggle) [closed]为什么这 sapply 不适用于我的数据框? (泰坦尼克号 kaggle)[关闭]
【发布时间】:2017-03-12 07:19:46
【问题描述】:

我有来自 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)

我收到以下错误:

passenger$Age 中的错误:$ 运算符对于原子向量无效

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

非常感谢

【问题讨论】:

    标签: r dataframe sapply kaggle


    【解决方案1】:

    它不起作用,因为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
    

    【讨论】:

      猜你喜欢
      • 2022-01-03
      • 2019-03-01
      • 1970-01-01
      • 2016-06-19
      • 2018-11-24
      • 2021-10-18
      • 2015-08-03
      • 2017-06-27
      • 2020-10-25
      相关资源
      最近更新 更多