【发布时间】:2013-04-21 15:38:52
【问题描述】:
我有一个名为 SMOKE 的因子,其级别为“Y”和“N”。缺失值被替换为 NA(从初始级别“NULL”开始)。但是,当我查看因素时,我会得到如下信息:
head(SMOKE)
# N N <NA> Y Y N
# Levels: Y N
为什么 R 将 NA 显示为 <NA>?有区别吗?
【问题讨论】:
标签: r na missing-data
我有一个名为 SMOKE 的因子,其级别为“Y”和“N”。缺失值被替换为 NA(从初始级别“NULL”开始)。但是,当我查看因素时,我会得到如下信息:
head(SMOKE)
# N N <NA> Y Y N
# Levels: Y N
为什么 R 将 NA 显示为 <NA>?有区别吗?
【问题讨论】:
标签: r na missing-data
当您处理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
R 只是试图区分一个字符串,其值为两个字母"NA" 和一个实际缺失值NA
因此,您在显示 df 与 df$y 时看到的差异。示例:
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。
【讨论】:
df <- data.frame(x=1:5, y=c("a", "b", NA_character_, "d"), stringsAsFactors=FALSE),它仍然是<NA>。当然,问题是针对向量的。但是,这对我来说还不清楚。例如:当您打印列时,df$y 它会消失。但是当你打印df 时,它会显示尖括号。
addNA(),例如levels(addNA(x))
factor(c("NA", "<NA>", NA))。查看某物的印刷表示并不是了解它是什么的好方法!
这正是 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
【讨论】:
data.table 可能是一个例外。
似乎一个字符字段将其打印为 ,而将数字字段打印为 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
【讨论】:
NA在factor或character中时,它被打印为<NA>。这与您使用 data.table 演示的相同。