具有来自R的具有cut函数的缺失值的NA级别

时间:2015-07-29 15:22:50

标签: r cut

R中的cut函数省略NA。但我希望有一个缺失值的水平。这是我的MWE。

set.seed(12345)
Y <- c(rnorm(n = 50, mean = 500, sd = 1), NA)
Y1 <-  cut(log(Y), 5)
Labs <- levels(Y1)
Labs

[1] "(6.21,6.212]"  "(6.212,6.213]" "(6.213,6.215]" "(6.215,6.217]" "(6.217,6.219]"

所需输出

[1] "(6.21,6.212]"  "(6.212,6.213]" "(6.213,6.215]" "(6.215,6.217]" "(6.217,6.219]" "NA"

2 个答案:

答案 0 :(得分:9)

您可以使用addNA

 Labs <- levels(addNA(Y1))
 Labs
#[1] "(6.21,6.212]"  "(6.212,6.213]" "(6.213,6.215]" "(6.215,6.217]"
#[5] "(6.217,6.219]" NA

在预期输出中,您有字符“NA”。但是,我认为拥有真正的NA更好,因为可以使用is.na

删除/替换它
 is.na(Labs)
 #[1] FALSE FALSE FALSE FALSE FALSE  TRUE

答案 1 :(得分:1)

将原始MWE的第三行更改为以下在Y1中存储NA(实际)而不是外部矢量Labs。这可以清理分析任务,例如制作表格或构建模型。 NA仍然被is.na()识别。

Y1 <-  factor(cut(log(Y), 5), exclude=NULL)
is.na(levels(Y1))

结果:

[1] FALSE FALSE FALSE FALSE FALSE  TRUE