35

変数名にスペースが含まれていない方が好ましいことはわかっています。出版品質のチャートが必要な状況にあるため、軸と凡例には適切にフォーマットされたラベル (スペースなど) が必要です。したがって、たとえば、開発中は「Pct.On.OAC」と Age.Group という変数を使用できますが、最終的なプロットでは「% on OAC」と「Age Group」を表示する必要があります。

'data.frame':   22 obs. of  3 variables:
 $ % on OAC           : Factor w/ 11 levels "0","0.1-9.9",..: 1 2 3 4 5 6 7 8 9 10 ...
 $ Age Group          : Factor w/ 2 levels "Aged 80 and over",..: 1 1 1 1 1 1 1 1 1 1 ...
 $ Number of Practices: int  47 5 33 98 287 543 516 222 67 14 ...

しかし、これらをプロットしようとすると:

ggplot(dt.m, aes(x=`% on OAC`,y=`Number of Practices`, fill=`Age Group`)) +
    geom_bar()
)

それで問題ありません。しかし、ファセットを追加すると:

ggplot(dt.m, aes(x=`% on OAC`,y=`Number of Practices`, fill=`Age Group`)) +
    geom_bar() +
    facet_grid(`Age Group`~ .) 

Error in[.data.frameを取得します(base, names(rows)) : undefined columns selected

に変更Age GroupするAge.Groupと問題なく動作しますが、前述のように、タイトルの凡例にドットを表示したくありません。

だから私の質問は:

  1. ファセットの問題の回避策はありますか?
  2. 最終的なプロットにそれらを含めたい場合、変数名のスペース (およびその他の文字) の問題に対処するためのより良い一般的なアプローチはありますか? それらを手動で上書きできると思いますが、それは多くの面倒のようです。
4

4 に答える 4

27

「変数名のスペース (およびその他の文字) の問題に対処するためのより良い一般的なアプローチはありますか」と尋ねましたが、いくつかあります。

  • ここで経験したように物事が壊れるので、それらを使用しないでください
  • 関数を使用make.names()して安全な名前を作成します。これはRでも識別子を作成するために使用されます(たとえば、スペースにアンダースコアを使用するなど)
  • 必要に応じて、安全でない識別子をバッククォートで保護してください。

最後の 2 つのポイントの例:

R> myvec <- list("foo"=3.14, "some bar"=2.22)
R> myvec$'some bar' * 2
[1] 4.44
R> make.names(names(myvec))
[1] "foo"      "some.bar"
R> 
于 2012-10-05T11:28:31.833 に答える
20

これは、内部の ggplot2 関数の関数が名前を構文的に有効な名前に変換するggplot2という事実に由来するパッケージの「バグ」です。これらの構文的に有効な名前は元のデータフレームには見つからないため、エラーが発生します。as.data.frame()quoted_df

あなたを思い出させます :

構文的に有効な名前は、文字、数字、およびドットまたは下線文字で構成され、文字またはドットで始まります (ただし、ドットの後に数字を続けることはできません)。

それには理由があります。ggplot を使用してラベルを設定できる理由もありますlabs。たとえば、有効な名前を持つ次のダミー データセットを使用します。

X <-data.frame(
  PonOAC = rep(c('a','b','c','d'),2),
  AgeGroup = rep(c("over 80",'under 80'),each=4),
  NumberofPractices = rpois(8,70)
  ) 

最後にラボを使用して、このコードを機能させることができます

ggplot(X, aes(x=PonOAC,y=NumberofPractices, fill=AgeGroup)) +
  geom_bar() +
  facet_grid(AgeGroup~ .) + 
  labs(x="% on OAC", y="Number of Practices",fill = "Age Group")

生産する

ここに画像の説明を入力

于 2012-10-05T11:35:18.833 に答える