0

次のコードを使用して、データベースから特定の行を削除しました。

df2 <- df1[!(df1$variable==1), ]

これはダミー変数であり、その特定のダミー変数の値が 1 である行は正常に削除されました。(前後に「dim」機能を使用してデータベースのサイズを確認しましたが、すべて正常に見えました。)

しかし、今回は新しいデータ セット「df2」を使用して回帰モデルを実行したところ、自由度が急激に低下したことがわかりました。これは、削除された行の数をはるかに超えていました!

どうしてこうなったのだろうと思いました。その後、新しいデータセットには、NA のみを持つ行が多数あることに気付きました。確率変数に欠損値がある各行で、R は NA 値の完全な行を作成しました。

上記のコードが行を削除する最良の方法ではないことに気付いた後、次のことを試しました。

df2 <- df1[(df1$variable==0 | is.na(df1$variable)), ]

私はもう同じ問題を抱えていないので、うまくいったようです。しかし、上記の新しいコードには、私が今のところ気付いていない (類似またはその他の) 問題がある可能性があると思いますか?

4

1 に答える 1

1

新しいコードは問題ないはずです。NA古いコードの問題は、 s indf1$variable==比較演算子の組み合わせが原因でした。

比較演算子のヘルプを読むと?"=="、「欠損値 (NA) や NaN 値は、それ自体でも比較不可能と見なされるため、それらを含む比較は常に NA になります。」と表示されます。

あなたの場合、 df1$variable が だったときはいつでも、NA試行されたサブセットの結果はNA(notTRUEまたはFALSE) でした。これにより、行の他の変数は になりNAました。例えば:

df1 <- expand.grid(variable=c(0, 1, NA), var2=c(0, 1, NA))

sel1 <- !(df1$variable==1)
sel1
df1[sel1, ]

sel2 <- df1$variable==0 | is.na(df1$variable)
sel2
df1[sel2, ]
于 2013-06-18T14:58:04.020 に答える