我试图在一个变量中对这些学校成绩进行排序,但是,我正在考虑这个“需要TRUE / FALSE的缺失值”,最初我想 - “好吧这将是NA值。”不幸的是我在其他帖子中添加了推荐,如果is.na(x),我仍然得到错误。
这是我的代码:
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)
答案 0 :(得分: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
,它应该很好地传播到因子。