R语言 NA和NA有什么区别?< NA> and NA?

hgqdbh6s  于 2023-06-19  发布在  其他
关注(0)|答案(3)|浏览(269)

我有一个因子名为烟雾,级别为“Y”和“N”。缺失值被替换为NA(从初始水平“NULL”开始)。但是,当我查看这个因素时,我得到了这样的结果:

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

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

u0njafvf

u0njafvf1#

当你处理factors时,当NA被括在尖括号(<NA>)中时,这表明它实际上是NA。
当它是不带括号的NA时,则它 * 不是 * 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的区别。

qyzbxkaa

qyzbxkaa2#

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

> 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"的方法,因为一个因子的打印方式不带引号,即使是字符标签/级别:

> f2 <- factor(c("NA",NA))
> f2
[1] NA   <NA>
Levels: NA
> is.na(f2)
[1] FALSE  TRUE
64jmpszr

64jmpszr3#

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

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

相关问题