1. ホーム
  2. r

[解決済み] Rでスパゲッティプロットを作るには?

2022-02-18 10:04:34

質問

を持っています。 heads(dataframe):

ID Result Days 

1   70     0         
1   80     23
2   90     15
2   89     30
2   99     40
3   23     24

が... 私がやろうとしていることは、上記のデータでスパゲッティプロットを作成することです。私が使っているのは、これです。

interaction.plot(dataframe$Days,dataframe$ID,dataframe$Result,xlab="Time",ylab="Results",legend=F) が、長蛇の列のはずなのに、どの患者さんも連続しない。

また、上記のデータフレームを次のようなものに変換したいのですが、どうすればよいでしょうか。 ID 結果 日数

1   70     0         
1   80     23
2   90     0
2   89     15
2   99     25
3   23     0

etc... (各IDの最初(または最小値)を取り、0から順に日付を表示させようとしています)。また、スパゲッティ・プロットでは、条件が満たされた場合はすべての患者が同じ色になり、条件が満たされなかった場合は別の色になるようにします。

お忙しい中、ありがとうございました。

解決方法は?

ggplot2とdata.tableを使って、こんな感じでどうでしょう。

# libs
library(ggplot2)
library(data.table)

# your data
df <- data.table(ID=c(1,1,2,2,2,3),
                 Result=c(70,80,90,89,99,23),
                 Days=c(0,23,15,30,40,24))

# adjust each ID to start at day 0, sort
df <- merge(df, df[, list(min_day=min(Days)), by=ID], by='ID')
df[, adj_day:=Days-min_day]
df <- df[order(ID, Days)]

# plot
ggplot(df, aes(x=adj_day, y=Result, color=factor(ID))) +
  geom_line() + geom_point() +
  theme_bw()

更新されたdata.frame(実際はdata.table)の内容。

 ID Result Days min_day adj_day
  1     70    0       0       0
  1     80   23       0      23
  2     90   15      15       0
  2     89   30      15      15
  2     99   40      15      25
  3     23   24      24       0

<イグ 色分けは scale_color_manual() を使って簡単に処理できます。