Ошибка: отсутствует значение там, где требуется ИСТИНА / ЛОЖЬ - PullRequest
0 голосов
/ 20 сентября 2018

Я довольно новичок в R. Я пробовал практический набор титановых данных (доступен онлайн).Я выполнял код для вменения пропущенных значений в столбце Возраст.Но я получаю ошибку - Ошибка в 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 голосов
/ 25 сентября 2018

Если вы хотите убежать от 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)))
 }
0 голосов
/ 24 сентября 2018

Вы можете попробовать это:

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)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...