R中的函数缺少需要TRUE / FALSE的缺失值 - 不是is.na()

时间:2015-11-21 02:02:26

标签: r

我试图在一个变量中对这些学校成绩进行排序,但是,我正在考虑这个“需要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)

以下是有关变量本身的一些描述性统计信息: IMAGE

1 个答案:

答案 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,它应该很好地传播到因子。