2

苦労している病院でのイベントの折れ線グラフがあります。

私がまだ解決していない課題は、1)患者の行が評価日で並べ替えられるようにプロット上の線を並べ替える、2)変数「openCase」で行を色分けする、3)最後に2014年(または他のランダムな日付のカット)にあるケースの排出ポイント(青い四角)を削除したい。

何か助けていただければ幸いです。

これが私のサンプルデータです、

library(ggplot2)
library(plyr)

df <- data.frame(
 date = seq(Sys.Date(), len= 156, by="5 day")[sample(156, 78)],
 openCase = rep(0:1, 39),
 patients = factor(rep(1:26, 3), labels = LETTERS)
)

df <- ddply(df, "patients", mutate, visit = order(date))
df$visit <- as.factor(df$visit)
levels(df$visit) <- c("Assessment (1)", "Treatment (2)", "Discharge (3)")

qplot(date, patients, data = df, geom = "line") + 
geom_point(aes(colour = visit), size = 2, shape=0)

一部の評価データは治療後のものであり、一部の退院データは評価データの前であるため、私の例のデータは完全ではないことを認識していますが、私の基本データが台無しになっているという課題の一部です。

現時点でどのように見えるか、 ドラフトクライアントダッシュボード

更新2012-04-3016:30:13PDT

私のデータはデータベースから配信され、次のようになります。

df <- structure(list(date = structure(c(15965L, 15680L, 16135L, 15730L, 
15920L, 15705L, 16110L, 15530L, 15575L, 15905L, 16140L, 15795L, 
15955L, 15945L, 16205L, 15675L, 15525L, 15830L, 15625L, 15725L, 
15855L, 15840L, 15615L, 15500L, 15780L, 15765L, 15610L, 15690L, 
16080L, 15570L, 15685L, 16175L, 15740L, 15600L, 15985L, 15485L, 
15605L, 16115L, 15535L, 15755L, 16145L, 16040L, 15970L, 16000L, 
16075L, 15995L, 16010L, 15990L, 15665L, 15895L, 15865L, 16120L, 
15880L, 15930L, 16055L, 15820L, 15650L, 16155L, 15700L, 15640L, 
15505L, 15750L, 15800L, 15775L, 15825L, 15635L, 16150L, 15860L, 
16100L, 15475L, 16050L, 15785L, 15495L, 15810L, 15805L, 15490L, 
15460L, 16085L), class = "Date"), openCase = c(0L, 0L, 0L, 1L, 
1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 
0L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 
0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 
1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L, 0L, 0L, 
0L, 1L, 1L, 1L, 0L, 0L, 0L, 1L, 1L, 1L), patients = structure(c(1L, 
1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L, 5L, 5L, 5L, 6L, 6L, 
6L, 7L, 7L, 7L, 8L, 8L, 8L, 9L, 9L, 9L, 10L, 10L, 10L, 11L, 11L, 
11L, 12L, 12L, 12L, 13L, 13L, 13L, 14L, 14L, 14L, 15L, 15L, 15L, 
16L, 16L, 16L, 17L, 17L, 17L, 18L, 18L, 18L, 19L, 19L, 19L, 20L, 
20L, 20L, 21L, 21L, 21L, 22L, 22L, 22L, 23L, 23L, 23L, 24L, 24L, 
24L, 25L, 25L, 25L, 26L, 26L, 26L), .Label = c("A", "B", "C", 
"D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", 
"Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z"), class = "factor"), 
    visit = structure(c(2L, 1L, 3L, 3L, 1L, 2L, 2L, 3L, 1L, 3L, 
    1L, 2L, 2L, 1L, 3L, 2L, 1L, 3L, 1L, 2L, 3L, 3L, 2L, 1L, 3L, 
    2L, 1L, 3L, 1L, 2L, 1L, 3L, 2L, 3L, 1L, 2L, 3L, 1L, 2L, 1L, 
    3L, 2L, 1L, 2L, 3L, 3L, 1L, 2L, 1L, 3L, 2L, 2L, 3L, 1L, 3L, 
    2L, 1L, 3L, 2L, 1L, 1L, 2L, 3L, 3L, 1L, 2L, 2L, 3L, 1L, 1L, 
    3L, 2L, 1L, 3L, 2L, 2L, 1L, 3L), .Label = c("zym", "xov", "poi"
    ), class = "factor")), .Names = c("date", "openCase", "patients", 
"visit"), row.names = c(NA, -78L), class = "data.frame")

のレベル数と特定のラベル付けは変更される可能性が高いので、新しい変数を生成する代わりに() 、または既存のデータに基づいたvisitある種のコードが必要です。ranksortvisit

4

2 に答える 2

7

これは途中です:

データの最初の定義の後から始めます。

まず、私はあなたがrank(date)むしろ望んでいると思いますorder(date)- とにかく、それは私にとってより理にかなっています。

df <- ddply(df, "patients", mutate, visit = rank(date))
df$visit <- as.factor(df$visit)
levels(df$visit) <- c("Assessment (1)", "Treatment (2)", "Discharge (3)")

最小の日付値 (= 評価日) で患者を並べ替えます。

df$patients <- reorder(df$patients,df$date,function(x) min(as.numeric(x)))

2014 年 1 月 1 日以降の放電ポイントがない新しいデータ セットを作成します (特定の日付以降に評価されたケースの放電ポイントを削除する場合は、 を使用する必要がありますddply)。

df2 <- subset(df,!(visit=="Discharge (3)" & date > as.Date("2014-01-01")))

上で @Joran が指摘したように、異なる変数に対して 2 つの個別のカラー スケールを取得するのは少し難しいですが、この種の機能は機能します (openCaseそれを のカラー スケールと組み合わせるには、要因にする必要がありますvisit) 。

ggplot(df, aes(date, patients)) + geom_line(aes(colour=factor(openCase))) + 
    geom_point(data=df2,aes(colour = visit), size = 2, shape=0)

別の方法として (そして、これはとにかくきれいだと思います)、次openCaseの行タイプでコーディングできます。

ggplot(df, aes(date, patients)) + geom_line(aes(linetype=factor(openCase))) + 
    geom_point(data=df2,aes(colour = visit), size = 2, shape=0)

ここに画像の説明を入力

于 2012-04-28T02:32:36.767 に答える
3

@Benの答えの何が問題なのかまだわかりませんが、自分の答えを追加してみます。df編集で指定されたものから始めます。

Visit指定された日付の順序に基づいて、評価/治療/退院である新しい変数 (大文字の V に注意してください) を作成します。これは @Ben のコードで、書き直したものです。

df <- ddply(df, "patients", mutate, 
  Visit = factor(rank(date),
                 levels = 1:3,
                 labels=c("Assessment (1)", "Treatment (2)", "Discharge (3)")))

visitこれが元のデータの列にどのように関係するのかわかりません。実際、元のvisit列は今後使用されません。

> table(df$Visit, df$visit)

                 zym xov poi
  Assessment (1)  16   7   3
  Treatment (2)    3  16   7
  Discharge (3)    7   3  16

患者を並べ替えます (再び Ben をコピーします)。

df$patients <- reorder(df$patients,df$date,function(x) min(as.numeric(x)))

表示するポイントのサブセットを決定します (Ben と同じ考えですが、コードは異なります)

df2 <- df[!((df$Visit == "Discharge (3)") & (df$date > as.Date("2014-01-01"))),]

新しいものを追加するために、凡例に影響を与えずに線を異なる色にする方法があります

ggplot(df, aes(date, patients)) +
    geom_blank() +
    geom_line(data = df[df$openCase == 0,], colour = "black") +
    geom_line(data = df[df$openCase == 1,], colour = "red") +
    geom_point(data = df2, aes(colour = Visit), size = 2, shape = 0)

ここに画像の説明を入力

于 2012-05-01T16:13:55.173 に答える