2013-06-20 9 views
13

私はRを使い始めたばかりですが、ggplot2で因子カウントの棒グラフを作成しようとしていますが、プロットすると実際のレベル最後にサンプル中の5000個のNAsを表す灰色の太い棒(サンプルの約5%にしか該当しない質問からの調査データです)。ggplotからNAsを削除する

ggplot(data = MyData,aes(x= the_variable, fill=the_variable, na.rm = TRUE)) + 
    geom_bar(stat="bin") 

ここでna.rm引数を追加しても明らかな効果はありません。

一方

ggplot(data = na.omit(MyData),aes(x= the_variable, fill=the_variable, na.rm = TRUE)) + 
    geom_bar(stat="bin") 

the_variableするna.omit()を貼り付ける、またはのMyDataとthe_variable両方んとして私に

"Error: Aesthetics must either be length one, or the same length as the data"

を与えます。

私がしたいことは、グラフから巨大なNAバーを取り除くことです。

+2

あなたのデータを持たずに助けることは本当に不可能です。私たちが実際に実行できる[小さな例](http://stackoverflow.com/q/5963269/324364)を提供する必要があるので、実際のデータ構造を見ることができます。 – joran

+2

データを見ることなく、プロット目的で非NA値だけをサブセット化することができます。つまり、MyData.sub - MyData [!is(naData)] 'であれば、サブセットをプロットします。私はしばしばゼロを取り除くのに似たようなことをします。 – dayne

+0

あなたのfill変数をリファクタリングするだけで動作しますか? 'fill = factor(the_variable) ' –

答えて

16

ggplot2の中で機能サブセットを使用することができます。私の視点から、この

library(ggplot2) 

data("iris") 
iris$Sepal.Length[5:10] <- NA # create some NAs for this example 

ggplot(data=subset(iris, !is.na(Sepal.Length)), aes(x=Sepal.Length)) + 
geom_bar(stat="bin") 
+0

残念ながら、' iris'にはNAsはありません。) – ikashnitsky

+0

今しています。ヘッドアップありがとう:) –

+0

ハ!それはコメントを扱う良い方法です))ほとんどの場合、Rに組み込まれたデータセット(https://vincentarelbundock.github.io/Rdatasets/datasets)から適切なデータセットがあります。html) – ikashnitsky

0

を試してみて、これは「エラー:データとして美学は長さ1、または同じ長さのいずれかでなければなりません」というエラー は、引数AES(x、y)に言及 私が試しましたna.omit()と私はうまく働いた。

1

@ rafa.pereiraの回答を更新しました。 ggplot2tidyverseの部分なので、便利な整理機能を使用してNAsを取り除くのが理にかなっています。

library(tidyverse) 
airquality %>% 
     drop_na(Ozone) %>% 
     ggplot(aes(x = Ozone))+ 
     geom_bar(stat="bin") 

drop_na()を列指定なしで使用することもできます。任意の列のNAsを持つすべての行が削除されます。

2

問題が解決したかどうかはわかりません。この問題では、dplyrパッケージの "filter"関数を使用できます。この考え方は、関心のある変数の値がNAではない観測値/行をフィルタリングすることです。次に、これらのフィルタリングされた観測値を使ってグラフを作成します。あなたは私のコードを見つけることができ、データフレームと変数のすべての名前が質問のプロンプトからコピーされることに注意してください。また、私はパイプのオペレータを知っていると仮定します。

library(tidyverse) 

MyDate %>% 
    filter(!is.na(the_variable)) %>% 
    ggplot(aes(x= the_variable, fill=the_variable)) + 
     geom_bar(stat="bin") 

あなたのプロットで迷惑なNAsを取り除くことができるはずです。この作品が期待されています:)

+0

ありがとう、グレゴール。私はコードを修正しました。 –