0

フィールド「var」が 0 のデータ行を抽出しようとしています。

しかし、「NA」が0と見なされていることがわかりました。

「な」は0行が20行、809行あります。

データ フレーム d には合計 81291 行あります。

> length(d$var[d$var == "0"])
[1] 829

> length(d$var[d$var == 0])
[1] 829

上記の 829 の値には、0 と「NA」の両方が含まれます。

> length(d$var[d$var == "NA"])
[1] 809

> length(d$var[d$var == NA])
[1] 81291

上記のコードで長さが d になるのはなぜですか?

4

3 に答える 3

1

これが正しい答えを与える解決策です。

長さ (どの (d$var == 0))

その問題に直面している理由は、式で条件チェックが NA 値に対して FALSE を与えず、代わりに NA を与え、インデックスとして条件を追加すると、FALSE ではない値がチェックされるためです。私が与えた式では、どの条件がTRUEであるかをチェックするため、正しい答えが得られます。

于 2013-11-30T14:50:31.280 に答える
1

これを評価する1つの方法は、洗練されていないことです

length(d$var[(d$var == 0) & (!is.na(d$var))])

(またはもう少しコンパクトに、sum(d$var==0 & !is.na(d$var)))

あなたのコードは、R 構文についての誤解を示していると思います。説明するために、コンパクトで再現可能な例を作成しましょう。

d <- data.frame(var=c(7, 0, NA, 0))

ご指摘のとおり、は として評価されるlength(d$var[d$var==0])ため、 は 3 を返します。NA==0NA

探している値を引用符で囲むと、R はそれを文字列として評価します。文字列のlength(d$var[d$var == "NA"])要素数を尋ねるのもd$var同様です。データセットには文字がないため、評価される値の数が返されます( に評価されるため)。 "NA""NA"NA"NA"==NANA

最後の質問に答えるために、元のベクトルと同じ長さのd$var[d$var==NA]ベクトルを返すものを見てください。NA繰り返しますが、との==比較は にNA評価されNAます。その式のすべての比較は toであるため、元のベクトルと同じ長さの s のNAベクトルが返されます。NA

于 2013-11-30T14:47:39.340 に答える