1. ホーム
  2. r

[解決済み] 0の値をすべてNAに置き換える

2022-01-29 16:04:53

質問

いくつかの数値列を持つデータフレームがあります。いくつかの行は、統計分析でヌルとみなされるべき0値を持っています。Rですべての0値をNULLに置き換える最速の方法は何ですか?

どのように解決するのですか?

ゼロをすべてNAに置き換える。

df[df == 0] <- NA


説明

1. ではありません。 NULL ゼロに置き換えるべきもの。に書いてあるように ?'NULL' ,

NULL は R の null オブジェクトを表します。

はユニークで、最も情報量の少ない空っぽのオブジェクトと見ることができるのではないでしょうか。 1 ということは、それほど驚くことではありません。

data.frame(x = c(1, NULL, 2))
#   x
# 1 1
# 2 2

つまり、RはこのNULLオブジェクトのためのスペースを確保しない。 2 一方 ?'NA' ということがわかります。

NAは長さ1の論理定数で、欠損値 のインジケータを使用します。NA は raw 以外の任意のベクトル型に強制することができる。

重要なことです。 NA は長さが1なので、Rはそのためのスペースを確保します。例えば

data.frame(x = c(1, NA, 2))
#    x
# 1  1
# 2 NA
# 3  2

また、データフレーム構造では、すべての列が同じ数の要素を持つ必要があるため、"holes" が存在することはできません(すなわち。 NULL の値)。

これで、ゼロを NULL は、少なくとも1つのゼロを含むすべての行を完全に削除するという意味で、データフレームに含まれます。使用する場合、例えば var , cov または cor でゼロを置き換えることと同じです。 NA の値を設定し use として "complete.obs" . しかし、一般的に、これは余分な情報の損失を招くため、満足のいくものではありません。

2. ある種のループを走らせる代わりに、ソリューションでは df == 0 ベクトル化する。 df == 0 と同じ大きさの行列を返します(試してみてください)。 df であり、エントリ TRUEFALSE . さらに、この行列を部分集合に渡すことも許されています [...] (参照 ?'[' ). 最後に df[df == 0] は完全に直感的に理解できるのですが、不思議に思われるかもしれません。 df[df == 0] <- NA を使えば、期待通りの効果が得られます。代入演算子 <- は必ずしもスマートではなく、他のオブジェクトではこのように動作しないものもありますが、データフレームではこのように動作します。 ?'<-' .


<サブ 1 集合論における空集合は、何となく関連性を感じる。
<サブ 2 また、集合論との類似点として、空集合はあらゆる集合の部分集合であるが、そのための空間は確保しない。