首页 文章

错误:缺少需要TRUE / FALSE的值

提问于
浏览
0

我是R的新手 . 我正在尝试动手实施泰坦尼克数据集(可在线获取) . 我正在运行一个代码来计算Age列中的缺失值 . 但我得到一个错误 - if(class [i] == 1){:缺少值需要TRUE / FALSE时出错 . 如何消除错误需要一些帮助 . 以下是使用的代码:

impute_Age <- function(Age, class){
  vector <- Age
  for(i in 1:length(Age)){
    if (is.na(Age[i])){
      if(class[i] == 1){
        vector[i] <- round(mean(filter(titanic, titanic$ï..pclass==1)$age, na.rm=TRUE),0)
       }else if (class[i] == 2){
        vector[i] <- round(mean(filter(titanic, titanic$ï..pclass==2)$age, na.rm=TRUE),0)
      }else{
        vector[i] <- round(mean(filter(titanic, titanic$ï..pclass==3)$age, na.rm=TRUE),0)
      }
    }else{
      vector[i]<-Age[i]
    }
  }
  return(vector)
}

imputed_Age <- impute_Age(titanic$age, titanic$ï..pclass)
titanic$age <- imputed_Age

2 回答

  • 0

    你可以试试这个:

    for (i in 1:3){
       titanic[which(is.na(titanic$age) & titanic$pclass==i),"age"] <-
       round(mean(titanic[which(titanic$pclass==i),"age"],na.rm=TRUE),digits=0)
    }
    
  • 0

    如果您想远离 for-loops ,可以使用嵌套的 if-else 来完成此操作 .

    titanic$age <- {
     age1 = round(mean(titanic$age[titanic$pclass == 1], na.rm = TRUE))
     age2 = round(mean(titanic$age[titanic$pclass == 2], na.rm = TRUE))
     age3 = round(mean(titanic$age[titanic$pclass == 3], na.rm = TRUE))
     ifelse(is.na(titanic$age) & titanic$pclass == 1, age1,
        ifelse(is.na(titanic$age) & titanic$pclass == 2, age2,
               ifelse(is.na(titanic$age) & titanic$pclass == 3, age3, titanic$age)))
     }
    

相关问题