我有一个如下所示的数据集:
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
我真的很感谢你的帮助。
答案 0 :(得分:0)
您需要进行一些数据争夺才能获得经济效益。在这里,我将使用dplyr
和tidyr
:
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()
答案 1 :(得分:0)