私は、データの検査が次のいくつかを示すデータセットを持っていますが、それらはすべて欠落しているはずです
'missing'
'unknown'
'uncoded'
これらのすべての出現を「NA」に置き換えることができると考えるのは正しいですか? これは好ましい方法ですか?
var[var=='missing'] <- NA
var[var=='unknown'] <- NA
var[var=='uncoded'] <- NA
私は、データの検査が次のいくつかを示すデータセットを持っていますが、それらはすべて欠落しているはずです
'missing'
'unknown'
'uncoded'
これらのすべての出現を「NA」に置き換えることができると考えるのは正しいですか? これは好ましい方法ですか?
var[var=='missing'] <- NA
var[var=='unknown'] <- NA
var[var=='uncoded'] <- NA
あなたが示していることは実行可能ですが、%in%
バイナリ演算子を介して比較を行う単一の呼び出しにコードを簡素化できます。ダミーデータを使用した例を次に示します。
set.seed(1)
var <- factor(sample(c("missing","unknown","uncoded", 1:4), 100, replace = TRUE))
これにより、次のような因子ベクトルが得られます。
> head(var)
[1] unknown uncoded 2 4 unknown 4
Levels: 1 2 3 4 missing uncoded unknown
> table(var)
var
1 2 3 4 missing uncoded unknown
14 15 17 13 10 18 13
c("missing","unknown","uncoded")
のいずれかとしてコード化されたこれらすべての値を に設定するNA
には、1 つのショットで行います。
var2 <- var ## copy for demo purposes, but you can over write if you wish
var2[var2 %in% c("missing","unknown","uncoded")] <- NA
を与える
> var2[var2 %in% c("missing","unknown","uncoded")] <- NA
> head(var2)
[1] <NA> <NA> 2 4 <NA> 4
Levels: 1 2 3 4 missing uncoded unknown
> table(var2)
var2
1 2 3 4 missing uncoded unknown
14 15 17 13 0 0 0
元のレベルがどのように保持されているかに注目してください。これらのレベルを削除したい場合は、droplevels()
関数をvar2
次のように適用できます。
var2 <- droplevels(var2)
を与える
> head(var2)
[1] <NA> <NA> 2 4 <NA> 4
Levels: 1 2 3 4
> table(var2)
var2
1 2 3 4
14 15 17 13
また、デフォルトでNA
は、これらは表形式の出力に表示されませんが、それらがまだ存在することを示すために修正されていることに注意してください。
> table(var2, useNA = "ifany")
var2
1 2 3 4 <NA>
14 15 17 13 41
それらをNAに置き換えるという一般的な考え方は正しいです。
recode
1行で実行したい場合は、次を使用できます。
library(car)
var <- recode( var, "c('missing','unknown','uncoded')=NA" )