我有来自泰坦尼克号的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)
我收到以下错误:
乘客误差$年龄:$运算符对原子矢量无效
我试图完全错误的方式是什么?
非常感谢
答案 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