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。)
有什么好办法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。)