26

モンテカルロ シミュレーションを実行していますが、出力は次の形式です。

> d = data.frame(iter=seq(1, 2), k1 = c(0.2, 0.6), k2=c(0.3, 0.4))
> d
iter  k1   k2
1     0.2  0.3
2     0.6  0.4

生成したいプロットは次のとおりです。

plot(d$iter, d$k1)
plot(density(d$k1))

ggplot2 を使用して同等のプロットを作成し、データ フレームに変換する方法を知っています

new_d = data.frame(iter=rep(d$iter, 2), 
                   k = c(d$k1, d$k2), 
                   label = rep(c('k1', 'k2'), each=2))

プロットは簡単です。ただし、反復回数が非常に多くなる可能性があり、k の数も大きくなる可能性があります。これは、非常に大きなデータ フレームをいじることを意味します。

この新しいデータ フレームの作成を回避できる方法はありますか?

ありがとう

4

4 に答える 4

17

短い答えは「いいえ」です。データ フレームの作成を避けることはできません。ggplotデータがデータ フレーム内にある必要があります。を使用するqplotと、x と y に別々のベクトルを与えることができますが、内部的には、渡したパラメーターからデータ フレームを作成しています。

私はjubaの提案に同意します-関数の使用方法を学ぶreshapeか、 /関数を含むreshapeパッケージを使用することをお勧めします。データを長い形式ですばやく作成できるようになると、素晴らしいグラフの作成に一歩近づきます!meltcastggplot

于 2010-01-14T16:02:07.260 に答える
4

reshapeこの関数を使用して、データ フレームを「長い」形式に変換できます。あなたのコードよりも少し速いかもしれませんか?

R> reshape(d, direction="long",varying=list(c("k1","k2")),v.names="k",times=c("k1","k2"))
     iter time   k id
1.k1    1   k1 0.2  1
2.k1    2   k1 0.6  2
1.k2    1   k2 0.3  1
2.k2    2   k2 0.4  2
于 2010-01-14T13:32:51.423 に答える
4

So just to add to the previous answers. With qplot you could do

p <- qplot(y=d$k2, x=d$k1)

and then from there building it further, e.g. with

p + theme_bw()

But I agree - melt/cast is genereally the way forward.

于 2010-01-15T12:44:14.013 に答える