为什么这不适用于我的数据框? (泰坦尼克号)
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
我有来自 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