首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 ><NA>和NA有什么区别?

<NA>和NA有什么区别?
EN

Stack Overflow用户
提问于 2013-04-27 23:24:13
回答 3查看 22.9K关注 0票数 53

我有一个名为SMOKE的因子,级别为"Y“和"N”。缺失值被NA替换(从初始级别“NULL”开始)。但是,当我查看因子时,得到的结果如下所示:

代码语言:javascript
复制
head(SMOKE)
# N N <NA> Y Y N
# Levels: Y N

为什么R将NA显示为<NA>?有什么不同吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-27 23:27:39

在处理factors时,当NA用尖括号( <NA> )括起来时,这表明它实际上是NA。

当它是不带括号的NA时,它不是NA,而是一个标记为"NA"的固有因子

代码语言:javascript
复制
# 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,这就是您在显示dfdf$y时看到的区别。示例:

代码语言:javascript
复制
df <- data.frame(x=1:4, y=c("a", NA_character_, "c", "NA"), stringsAsFactors=FALSE)

注意NA的两种不同样式:

代码语言:javascript
复制
> df
  x    y
1 1    a
2 2 <NA>
3 3    c
4 4   NA

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

代码语言:javascript
复制
[1] "a"  NA   "c"  "NA"

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

代码语言:javascript
复制
print(df$y, quote=FALSE)
[1] a    <NA> c    NA  

因此,我们再一次通过尖括号区分了NA

票数 53
EN

Stack Overflow用户

发布于 2013-04-27 23:29:27

这就是R在一个因子中显示NA的方式:

代码语言:javascript
复制
> as.factor(NA)
[1] <NA>
Levels: 
> 
> f <- factor(c(1:3, NA))
> levels(f)
[1] "1" "2" "3"
> f
[1] 1    2    3    <NA>
Levels: 1 2 3
> is.na(f)
[1] FALSE FALSE FALSE  TRUE

人们假设这是一种在打印因子时区分NA"NA"的方法,因为它打印时没有引号,即使是字符标签/级别:

代码语言:javascript
复制
> f2 <- factor(c("NA",NA))
> f2
[1] NA   <NA>
Levels: NA
> is.na(f2)
[1] FALSE  TRUE
票数 12
EN

Stack Overflow用户

发布于 2018-12-20 05:31:51

也许data.table可能是一个例外。似乎字符字段将其打印为< NA >,而数字字段将其打印为NA。注:我在< NA >中添加了额外的空格,否则此网页无法正确显示它。

代码语言:javascript
复制
library("data.table")

y<-data.table(a=c("a","b",NA))

print(y)
      a
1:    a
2:    b
3: < NA >

factor(y$a)

[1] a    b    < NA >

Levels: a b

## we enter a numeric argument

y<-data.table(a=c(1,2,NA))

print(y)
    a
1:  1
2:  2
3: NA

factor(y$a)

[1] 1    2    < NA >

Levels: 1 2
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16253789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档