新しい因子レベルNA
で置き換えたいNA
値を持つベクトルがあります。
a = as.factor(as.character(c(1, 1, 2, 2, 3, NA)))
a
[1] 1 1 2 2 3 <NA>
Levels: 1 2 3
これは機能しますが、奇妙な方法のようです。
a = as.factor(ifelse(is.na(a), "NA", a))
class(a)
[1] "factor"
これは予想される出力です。
a
[1] 1 1 2 2 3 NA
Levels: 1 2 3 NA
addNA()
を使用できます。
_x <- c(1, 1, 2, 2, 3, NA)
addNA(x)
# [1] 1 1 2 2 3 <NA>
# Levels: 1 2 3 <NA>
_
これは基本的に_exclude = NULL
_で因数分解するための便利な関数です。 help(factor)
から-
addNA
は、NA
を特別なレベルに変更することで係数を変更します(たとえば、NA
値はテーブルでカウントされます)。
これがナイスであるもう1つの理由は、すでにf
因子がある場合、addNA()
を使用して、NA
を変更せずにf
を因子レベルとしてすばやく追加できるためです] _。ドキュメントで述べたように、これはテーブルに便利です。また、読みやすいです。
ExcludesをNULLに設定して、レベルとしてNAを含めます(as.factorの代わりにfactorを使用します。同じことを行い、設定する引数がさらにあります)。
a = factor(as.character(c(1, 1, 2, 2, 3, NA)), exclude = NULL)
> a
[1] 1 1 2 2 3 <NA>
Levels: 1 2 3 <NA>
NAをレベルとして追加し、パッケージforcatsの<NA>
を使用して、レベル名をfct_explicit_na
より明示的な名前に変更できます。
library(forcats)
デフォルトでは、(Missing)
として新しいレベルを取得します:
fct_explicit_na(a)
[1] 1 1 2 2 3 (Missing)
Levels: 1 2 3 (Missing)
他の何かに設定できます:
fct_explicit_na(a, "unknown")
[1] 1 1 2 2 3 unknown
Levels: 1 2 3 unknown