7

私はRを初めて使用します。この質問に明らかな答えがある場合は許してください。しかし、解決策を見つけることができませんでした。私は SAS の経験があり、この問題を間違った方法で考えているだけかもしれません。

私は、何百もの被験者から繰り返し測定されたデータセットを持っています。各被験者は、さまざまな年齢にわたって複数の測定値を持っています。各サブジェクトは、ID 変数によって識別されます。個々の被験者 (ID) ごとに、年齢別に各測定値 (体重としましょう) をプロットしたいと思います。

私はggplot2を使って次のようなことをしました:

ggplot(data = dataset, aes(x = AGE, y = WEIGHT )) + geom_line() + facet_wrap(~ID)

これは少数の被験者には有効ですが、データセット全体には有効ではありません。

私も次のようなことを試しました:

ggplot(data=data, aes(x = AGE,y = BW, group = ID, colour = ID)) + geom_line()

これも少数の被験者には機能しますが、数百の被験者では判読できません。

次のようなコードを使用してサブセット化しようとしました:

temp <- split(dataset,dataset$ID)

しかし、結果のデータセットをどのように扱うかわかりません。あるいは、個々のプロットが作成されるように facet_wrap を単純に調整する方法があるのでしょうか?

ありがとう!

4

3 に答える 3

20

データセットを分割し、因子のレベルごとにプロットを作成する必要があるため、plyrパッケージの分割適用リターン ツールの 1 つを使用してアプローチします。

これは、データセットを使用したおもちゃの例ですmtcars。最初にプロットを作成して という名前を付けp、次に を使用dlplyしてデータセットを係数で分割し、各レベルのプロットを返します。%+%fromを利用ggplot2して、プロットの data.frame を置き換えています。

p = ggplot(data = mtcars, aes(x = wt, y = mpg)) + 
    geom_line()

require(plyr)
dlply(mtcars, .(cyl), function(x) p %+% x)

これにより、すべてのプロットが次々に返されます。結果のリスト オブジェクトに名前を付けると、一度に 1 つのプロットを呼び出すこともできます。

plots = dlply(mtcars, .(cyl), function(x) p %+% x)
plots[1]

編集

要因に基づいて各プロットにタイトルを付けることを考え始めました。これは役に立ちそうです。

dlply(mtcars, .(cyl), function(x) p %+% x + facet_wrap(~cyl))

編集 2

これらを 1 つのドキュメント (ページごとに 1 つのプロット) に保存する方法の 1 つを次に示します。これは、 という名前のプロットのリストを操作していますplots。それらすべてを 1 つのドキュメントに保存し、ページごとに 1 つのプロットを保存します。の既定値は変更しませんでしたがpdf、変更できる内容を確認することはできます。

pdf()
plots
dev.off()

dplyrの代わりにパッケージを使用するように更新されましplyrた。これは で行われdo、出力には、すべてのプロットをリストとして含む名前付きの列が含まれます。

library(dplyr)
plots = mtcars %>%
    group_by(cyl) %>%
    do(plots = p %+% . + facet_wrap(~cyl))


Source: local data frame [3 x 2]
Groups: <by row>

  cyl           plots
1   4 <S3:gg, ggplot>
2   6 <S3:gg, ggplot>
3   8 <S3:gg, ggplot>

R でプロットを表示するには、プロットを含む列を要求するだけです。

plots$plots

そして、pdfとして保存するには

pdf()
plots$plots
dev.off()
于 2013-10-02T22:33:37.287 に答える
3

数年前、私は似たようなことをしたいと思っていました - それぞれ 1-7 回の測定で ~2500 人の参加者の個々の軌跡をプロットします。plyrと を使用して、ggplot2次のようにしました。

library(plyr)
library(ggplot2)

d_ply(dat, .var = "participant_id", .fun = function(x) {

    # Generate the desired plot
    ggplot(x, aes(x = phase, y = result)) +
        geom_point() +
        geom_line()

    # Save it to a file named after the participant
    # Putting it in a subdirectory is prudent
    ggsave(file.path("plots", paste0(x$participant_id, ".png")))

})

少し遅いですが、うまくいきました。1 つのプロット (2 番目の例 - 別名スパゲッティ プロット) ですべての参加者の軌跡を把握したい場合は、線の透明度を微調整できます (色付けは忘れてください)。

ggplot(data = dat, aes(x = phase, y = result, group = participant_id)) + 
    geom_line(alpha = 0.3)
于 2013-10-02T22:52:36.567 に答える
2
lapply(temp, function(X) ggplot(X, ...))

Xサブセット化されたデータはどこにありますか

オブジェクトを明示的に指定printする必要がある場合があることに注意してください( )ggplotprint(ggplot(X, ..))

于 2013-10-02T20:59:48.740 に答える