27

データ分析を目的とした DSL から予想されるように、R は欠落/不完全なデータを非常にうまく処理します。たとえば、次のようになります。

多くの R 関数には、TRUEに設定すると NA を削除するna.rmフラグがあります。

>>> v = mean( c(5, NA, 6, 12, NA, 87, 9, NA, 43, 67), na.rm=T)
>>> v
      (5, 6, 12, 87, 9, 43, 67)

しかし、関数呼び出しの前に NA を処理したい場合は、次のようにする必要があります。

ベクトルから各「NA」を削除するには:

vx = vx[!is.na(a)]

ベクトルから各「NA」を削除し、「0」に置き換えるには:

ifelse(is.na(vx), 0, vx)

データフレームから「NA」を含む各行全体を削除するには:

dfx = dfx[complete.cases(dfx),]

これらの関数はすべて、「NA」または「NA」を含む行を完全に削除します。

ワークフローの次のステップでは、データ フレームの 'NA' を削除したコピーを作成する必要があるかもしれませんが、その後のステップでは、これらの行を元に戻したい場合がよくあります (たとえば、 「完全なケース」への以前の呼び出しによって行が欠落しているが、その列に「NA」値がない列の列単位の統計)。

私が探しているものについてできるだけ明確にするために: python/numpy には、マスクメソッドを備えたクラスmasked array があり関数呼び出し中に NA を非表示にできますが、削除できません。Rに類似の機能はありますか?

4

3 に答える 3

19

欠落しているデータ (欠落してNAいることがわかっているかのようにフラグが立てられる可能性があります) をどうするかは、ドメインごとに異なる場合があります。

時系列に関連する例を挙げると、スキップしたり、塗りつぶしたり、補間したり、別の方法で補間したりできます...つまり (非常に便利で人気のある)動物園NAには、処理に関連するこれらすべての機能があります。

zoo::na.approx  zoo::na.locf    
zoo::na.spline  zoo::na.trim    

近似 (異なるアルゴリズムを使用)、繰り越しまたは後戻り、スプライン補間またはトリムの使用が可能です。

もう 1 つの例は、CRAN で欠落している多数の代入パッケージです。多くの場合、ドメイン固有のソリューションを提供します。[ R を DSL と呼ぶとしたら、これは何でしょう? 「ドメイン固有言語のサブドメイン固有のソリューション」または SDSSFDSL? かなり一口:)]

しかし、あなたの特定の質問については、いいえ、観測を「除外する」とマークできるベースRのビットレベルフラグを認識していません。ほとんどの R ユーザーはna.omit()et al のような関数に頼るか、na.rm=TRUEあなたが言及したオプションを使用すると思います。

于 2010-04-10T15:11:30.647 に答える
15

データを見て、欠損値の種類を推測することをお勧めします。MCAR (完全かつランダムに欠損)、MAR (ランダムに欠損)、または MNAR (ランダムに欠損していない) ですか? これらの 3 つのタイプに基づいて、欠損値の基礎となる構造を調査し、代入がまったく適用可能かどうかを結論付けることができます (MNAR でない場合は幸運です。その場合、欠損値は無視できないと見なされ、いくつかの未知の根本的な影響、要因、プロセス、変数に関連しています...何でも)。

Di CookDeborah Swayneによる「R と GGobi を使用したデータ アナリスト向けの対話型および動的グラフィックス」の第 3 章は、このトピックに関する優れたリファレンスです。

normこの章でパッケージの動作を確認しますが、Hmiscパッケージにはデータ代入ルーチンがあります。Amelia, cat(カテゴリ欠損代入について)、, , mi(mitools欠損データの視覚化について)も参照してください。VIMvmv

正直なところ、あなたの質問が統計に関するものなのか、それとも R の欠落データ代入機能に関するものなのか、まだよくわかりません。2番目のものと最初のものについては、適切な参照を提供したと思います。NAを中心傾向(平均、中央値、または同様のもの)に置き換えて、変動性を減らすか、「引き出された」ランダムな定数に置き換えることができます観察された(記録された)ケースのCPU には気をつけてください (私は 1.1GHz で Celeron を使っているので、やさしくしなければなりません)。

これは最適化の問題です...明確な答えはありません。何を/なぜ何らかの方法に固執しているのかを判断する必要があります。しかし、データを見ることは常に良い習慣です! =) 必ず Cook & Swayne をチェックしてください。これは優れた、巧みに書かれたガイドです。Farawayによる"Linear Models with R"には、欠損値に関する章も含まれています。

そこで。

幸運を!=)

于 2010-06-08T03:03:10.670 に答える
8

この関数na.exclude()は、一部の (重要な) 関数のオプションにすぎませんが、必要なように聞こえます。

モデルのフィッティングと操作のコンテキストでは、R には NA を処理するための一般的な関数のファミリがあります: na.fail()na.pass()na.omit()、およびna.exclude()。これらは、 、 、および MASS、rpart、および Survival パッケージの関数など、R のいくつかの主要なモデリング関数の引数ですlm()glm()nls()

4 つの汎用関数はすべて、基本的にフィルターとして機能します。 na.fail()NAがない場合にのみデータを渡します。それ以外の場合は失敗します。na.pass()すべてのケースを通過します。 na.omit()NAをna.exclude()持つケースを除外し、他のケースを通過させます。ただしna.exclude()、結果のオブジェクトを処理する関数に NA を考慮するように指示する別の属性があります。した場合、この属性を見ることができますattributes(na.exclude(some_data_frame))。これは、線形モデルのコンテキストで のna.exclude()動作がどのように変化するかを示すデモです。predict()

fakedata <- data.frame(x = c(1, 2, 3, 4), y = c(0, 10, NA, 40))

## We can tell the modeling function how to handle the NAs
r_omitted <- lm(x~y, na.action="na.omit", data=fakedata) 
r_excluded <- lm(x~y, na.action="na.exclude", data=fakedata)

predict(r_omitted)
#        1        2        4 
# 1.115385 1.846154 4.038462 
predict(r_excluded)
#        1        2        3        4 
# 1.115385 1.846154       NA 4.038462 

ちなみに、デフォルトの na.action はによって決定されoptions("na.action")、開始されna.omit()ますが、設定できます。

于 2014-05-13T18:25:01.740 に答える