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
我发布了一个功能,但是我希望有一个更简洁的解决方案,或者至少已经存在于包中的测试功能。
答案 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。)