cut() 具有缺失值的变量

cut() a variable with missing values

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

我更喜欢 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

我在下面发布了一个函数来完成这个,但我希望有一个更简洁的解决方案,或者至少是一个已经存在于包中的经过测试的函数。

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 的
(还有一点来自 this unanswered question。)