cut()一个缺少值的变量

时间:2018-06-15 21:02:42

标签: r na

cut()有什么好方法 一个量化变量到水平,包括专用于NA的最终水平?

我更喜欢tidyverse函数通常提供的.missing参数之类的东西 (例如dplyr::recode()& dplyr::if_else())。

如果输入为w并且此假设函数名为cut_with_nas,则以下代码

w <- c(0L, NA_integer_, 22:25, NA_integer_, 40)
cut_with_nas(w, breaks=2)

会产生所需的输出:

[1] (-0.04,20] Unknown    (20,40]    (20,40]    (20,40]    (20,40]    Unknown    (20,40]   
Levels: (-0.04,20] (20,40] Unknown

我发布了一个功能,但是我希望有一个更简洁的解决方案,或者至少已经存在于包中的测试功能。

1 个答案:

答案 0 :(得分:0)

cut_with_nas   <- function( x, breaks, labels=NULL, .missing="Unknown" ) {
  y <- cut(x, breaks, labels) #, include.lowest = T, right=F)
  y <- addNA(y)
  levels(y)[is.na(levels(y))] <- .missing
  return( y )
}

这个功能的大部分在三年前由@akrun的response大量窃取 (还有一点来自this unanswered question。)