我有一个名为SMOKE的因子,级别为"Y"和"N".缺失的值替换为NA(从初始级别"NULL").然而,当我看到这个因素时,我得到了如下结果:
head(SMOKE)
# N N <NA> Y Y N
# Levels: Y N
为什么R显示NA
为<NA>
?有区别吗?
我有一个名为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
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
的区别.