レベルが「Y」と「N」のSMOKEという名前の因子があります。欠損値は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
は、値が2つの文字"NA"
である文字列と実際の欠損値NA
を区別しようとするだけです。したがって、df
を表示すると、違いがわかります対df$y
。例:
df <- data.frame(x=1:4, y=c("a", NA_character_, "c", "NA"), stringsAsFactors=FALSE)
NAの2つの異なるスタイルに注意してください。
> 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が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