R中的意大利面条

时间:2015-09-09 14:04:42

标签: r loops plot

我有一个如下所示的数据集:

   PatientID Visit  Var1  Var2  Var3  Var4 Var5
1        ID1     0 42.28  4.57 22.56  4.36 8.87
2        ID1     1 55.60  6.34  3.74  3.76 6.96
3        ID1     2 69.45 11.18 20.69  2.15 8.34
4        ID2     0 58.78  7.81  6.57  1.19 7.31
5        ID2     1 10.33 38.27  0.48 14.41   NA
6        ID2     2 69.45 11.18 20.69  2.15 8.34
7        ID3     0 69.16  6.17  8.98  1.91 6.12
8        ID3     1 86.02 19.62  4.18  2.36 4.17
9        ID3     2 69.45 11.18 20.69  2.15 8.34
10       ID4     0 94.05 26.75  2.89  2.92 2.17
11       ID4     1 48.66 14.38  4.96  1.13 4.78
12       ID4     2 69.45 11.18 20.69  2.15 8.34

我实际上总共有大约60个变量,所以这里我只是展示一个样本。我需要在R中计算每次访问时每个变量的平均值,然后创建一个60行的意大利面条图(每个对应于每次访问时每个变量的平均值,以检查是否随时间发生变化,即访问)。我还需要为特定变量着色,例如var 1和var 4,红色。

我通常使用以下代码创建意大利面图,但在这种情况下,我可能需要创建一个循环来计算均值?

library(ggplot2)
library(data.table)
library(plyr)

tspag = ggplot(all.data, aes(x=Visit, y=Mean_values)) + 
  geom_line() + guides(colour=FALSE) + xlab("Days after") +
  ylab("Mean plot") + theme_bw() + theme(panel.border = element_blank(), panel.grid.major = element_blank(), 
    panel.grid.minor = element_blank(), axis.line = element_line(colour = "black"))

spag = tspag + aes(colour = factor(XXXX))
spag

我真的很感谢你的帮助。

2 个答案:

答案 0 :(得分:0)

您需要进行一些数据争夺才能获得经济效益。在这里,我将使用dplyrtidyr

library(dplyr)
library(tidyr)
all.data <- dat %>% group_by(Visit) %>%
                    summarise_each(funs(mean(., na.rm=TRUE)), -PatientID) %>%
                    gather(variable, val, -Visit)

因此,我们按访问分组,取每列的平均值(patientID除外),然后使用gather将数据重新整形为长格式。

现在你可以绘制它。我将放弃你的所有主题 - 它们可以很容易地加回来:

library(ggplot2)
ggplot(all.data, aes(x = Visit, y = val, colour = variable)) + 
  geom_line()

enter image description here

答案 1 :(得分:0)

假设您希望每次访问的Var-n均为平均所有患者,这里有一个使用ggplot汇总数据的解决方案。

library(reshape2)   # for melt(...)
library(ggplot2)
gg.df <- melt(df, id=1:2)
ggplot(gg.df, aes(x=Visit, y=value, color=variable))+
  stat_summary(fun.y=mean, geom="line")+
  scale_x_continuous(breaks=unique(gg.df$Visit))