2015-11-21 2 views
0

Я пытаюсь сортировать эти школьные оценки в переменной, но я столкнулся с этим «отсутствующим значением, где TRUE/FALSE необходимо» изначально I подумал: «Ладно, это будут ценности НС». К сожалению, я добавил рекомендуемые в других сообщениях, если is.na (x), и я все еще получаю ошибку.Функция в R отсутствует пропущенное значение, где требуется TRUE/FALSE - not is.na()

Вот мой код:

convert.factor <- function(val){ 
    if(val <= 1.49){ 
    return("F/E") 
    } else if(val >= 1.50 & val <= 2.49) { 
    return("D") 
    } else if(val >= 2.50 & val <= 3.49) { 
    return("C") 
    } else if(val >= 3.50 & val <= 4.49) { 
    return("B") 
    } else if (val >= 4.50 & val <= 5.00){ 
    return("A") 
    } else if (is.na(val)){ 
    return("NA") 
    } 
} 

WaveOne$GPA <- sapply(WaveOne$V139, convert.factor) 

Вот некоторые discriptive статистика по самой переменной: IMAGE

Спасибо заранее!

+1

Знаешь о 'cut'? – Arthur

+1

вы, кажется, изобретаете «cut» (WaveOne $ V139, breaks = c (0,1,5, 2,5,3,5,4,5,5), labels = c ('E/F', 'D', 'C', 'B ',' A ')) ' – Arthur

+0

, который должен обрабатывать' NA 'прекрасно – Arthur

ответ

1

Вы действительно хотите пересоздать cut, вы должны использовать ifelse вместо if. Это должно быть что-то уродливое, как:

convert.factor <- function(val){ 
    ifelse(val<1.5, 'E/F', 
    ifelse(val<2.5, 'D', # no need to repeat val>=1.5 now! 
     ifelse(val<3.5, 'C', 
     ifelse(
      ...    # you complete here  
    ) 
    ) 
) 
} # you do not need to use return() 

cut В противном случае короче и легче читать!

cut_grade <- function(grade) cut(
    grade, 
    breaks=c(0,1.5, 2.5,3.5,4.5,5), 
    labels=c('E/F','D','C','B','A') 
) 

Во всех случаях, вы не должны думать о NA с, что должно распространяться красиво фактору.

+0

Спасибо, я не знал об этом методе вырезания! :) – Azoff

+0

вы должны принять мой ответ, тогда;) – Arthur

Смежные вопросы