2

私は、データの検査が次のいくつかを示すデータセットを持っていますが、それらはすべて欠落しているはずです

'missing'
'unknown'
'uncoded'

これらのすべての出現を「NA」に置き換えることができると考えるのは正しいですか? これは好ましい方法ですか?

var[var=='missing'] <- NA
var[var=='unknown'] <- NA
var[var=='uncoded'] <- NA
4

2 に答える 2

6

あなたが示していることは実行可能ですが、%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
于 2012-07-04T11:00:32.620 に答える
4

それらをNAに置き換えるという一般的な考え方は正しいです。

recode1行で実行したい場合は、次を使用できます。

library(car)
var <- recode( var, "c('missing','unknown','uncoded')=NA" )
于 2012-07-04T10:56:35.657 に答える