我有一个名为SMOKE的因子,级别为"Y"和"N".缺失的值替换为NA(从初始级别"NULL").然而,当我看到这个因素时,我得到了如下结果:

head(SMOKE)
# N N <NA> Y Y N
# Levels: Y N

为什么R显示NA<NA>?有区别吗?

推荐答案

当你处理factors,当NA被包裹在角括号(<NA>)中时,这表明它实际上是NA.

如果没有括号,它是NA,那么它是not NA,而是一个适当的因子,其标签是"NA"

# Note a 'real' NA and a string with the word "NA"
x <- factor(c("hello", NA, "world", "NA"))

x
[1] hello <NA>  world NA   
Levels: hello NA world      <~~ The string appears as a level, the actual NA does not. 

as.numeric(x)              
[1]  1 NA  3  2            <~~ The string has a numeric value (here, 2, alphabetically)
                               The NA's numeric value is just NA

编辑以回答@Arun的问题:

R只是试图区分值为两个字母"NA"的字符串和实际缺失的值NA

df <- data.frame(x=1:4, y=c("a", NA_character_, "c", "NA"), stringsAsFactors=FALSE)

请注意NA的两种不同风格:

> df
  x    y
1 1    a
2 2 <NA>
3 3    c
4 4   NA

然而,如果我们只看"df$y"

[1] "a"  NA   "c"  "NA"

但是,如果我们删除引号(类似于将data.frame打印到控制台时看到的情况):

print(df$y, quote=FALSE)
[1] a    <NA> c    NA  

因此,通过角括号,我们再次获得了NA的区别.

R相关问答推荐

返回句子中最长的偶数长单词

为什么stat_bin在R中的ggplot中显示错误的数字?

geom_raster不适用于x比例中超过2,15的值

按块将载体转换为矩阵-reshape

在ggplot的注释表格中突出显示最大值

具有多个依赖变量/LHS的逻辑模型

以R中的正确顺序将日期时间字符列转换为posixct

使用gggrassure减少地块之间的空间

抖动点与嵌套类别变量箱形图的位置不对齐

多重RHS固定估计

在特定Quarto(reveal.js)幻灯片上隐藏徽标

如何动态更新selectizeInput?

使用R闪光显示所有数据点作为默认设置

R中的哈密顿滤波

DEN扩展包中的RECT树形图出现异常行为

计算数据帧中指定值之前的行数,仅基于每行之后的future 行,单位为r

在纵向数据集中创建新行

将数据集旋转到长格式,用于遵循特定名称模式的所有变量对

有没有办法一次粘贴所有列

如何将EC50值绘制在R中的剂量-react 曲线上?