2

以下のようなサンプルデータtest.dataがあります。

income  expend  id
9142.7  1576.2  1
23648.75 2595   2
9014.25 156 1
4670.4  604.4   3
6691.4  3654.4  3
14425.2 66  2
8563.45 1976.2  2
2392    6   1
7915.95 619.2   3
4424.2  504.2   2

最初ddplyに、各IDの平均収入と支出を取得するために使用します

library(plyr)
group<-ddply(test.data, .id,summarize, income.mean=mean(income),expend.mean=mean(expend))

今、私はからのプロット関数を使用してプロットggplot2income.mean and expend.meanますid.

library (ggplot2)
plot.income<-qplot(id,income.mean,data=group)
plot.expend<-qplot(id,expend.mean,data=group)

上記のコードはエラーなしで実行されますが、qplot 関数を ddply で、またはその逆に組み合わせる効率的な方法を探しています。また、これらの両方のプロットを組み合わせる必要がある場合、どうすればよいですか?

ありがとう 。

4

3 に答える 3

3

あなたが得ようとしていることは、「qplot」関数から「ggplot」関数に切り替える必要があると思います。'ddply'関数内にグラフ化関数を含めることは、あまりきれいにはなりません。逆もまた同様です。それらを別々にしておく方がよいので、グラフの組み合わせに焦点を当てます。これを行うには、(私の意見では)2つの良い方法があります。

オプション1:同じ'ggplot'オブジェクトで両方のプロットを別々のジオメトリとして実行するだけです。これは難しいことではなく、次のように機能します。

ggplot(group) + geom_point(aes(x=id, y=income.mean), colour="red") + geom_point(aes(x=id, y=expend.mean), colour="blue")

これは高速なオプションであり、最小限の計算で作業を完了します。ただし、列ごとに新しいジオメトリを指定する必要があります。サンプルデータでは、これは問題ではありませんが、多くの場合、手動ではなくコードを使用してこれを実行する必要があります。

オプション2:1つのプロット内で両方のセットを組み合わせるために、データの形状を変更します。次に、変数で色付けしてグループ化を指定できます

library(reshape2)
plot_Data <- melt(group, id="id")

# Output of plot_Data
#   id    variable     value
# 1  1 income.mean  6849.650
# 2  2 income.mean 12765.400
# 3  3 income.mean  6425.917
# 4  1 expend.mean   579.400
# 5  2 expend.mean  1285.350
# 6  3 expend.mean  1626.000

ggplot(plot_Data, aes(x=id, y=value, col=variable)) + geom_point()

チャートの例

この方法の欠点は、より多くの計算を行うため、大きく複雑なデータフレームの処理が遅くなる可能性があることです。ただし、利点(およびこれは非常に大きい)は、プロットしているデータフレームにどの列が存在するかを知る必要がないことです。すべてが私たちの介入なしにソート、色付け、プロットされるので、これをほぼすべてに柔軟に使用できます。

ここからニーズに合わせて調整できるはずです。

于 2013-02-05T15:41:10.587 に答える
2

両方のプロットを組み合わせるには、reshape2パッケージをmeltデータに投入する必要がありました。

library(ggplot2)
library(plyr)
library(reshape2)

test.data <- read.table(text="income  expend  id
                 9142.7  1576.2  1
                 23648.75 2595   2
                 9014.25 156 1
                 4670.4  604.4   3
                 6691.4  3654.4  3
                 14425.2 66  2
                 8563.45 1976.2  2
                 2392    6   1
                 7915.95 619.2   3
                 4424.2  504.2   2", header=TRUE)

qplot(data=melt(ddply(test.data, .(id), colwise(mean)), id.vars="id"), x=id, y=value, colour=variable)

ここに画像の説明を入力

于 2013-02-05T15:37:29.823 に答える
1

あなたが何をしたいのか正確にはわからないので、あなたの質問はあまり正確ではありません。しかし、ここに推測があります:

d <- read.table(textConnection("income  expend  id
9142.7  1576.2  1
23648.75 2595   2
9014.25 156 1
4670.4  604.4   3
6691.4  3654.4  3
14425.2 66  2
8563.45 1976.2  2
2392    6   1
7915.95 619.2   3
4424.2  504.2   2"), header=TRUE)

library(reshape2)
d2 <- melt(d, id.var="id")
ggplot(data=d2, aes(x=id,y=value)) + stat_summary(fun.y="mean", geom="bar") + facet_grid(.~variable)

あげる :

ここに画像の説明を入力

于 2013-02-05T15:38:58.323 に答える