>dput(data)
structure(list(ID = c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 3, 3, 3,
3, 3), Dx = c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 1, 1, 1, 1, 1), Month = c(0,
6, 12, 18, 24, 0, 6, 12, 18, 24, 0, 6, 12, 18, 24), score = c(0,
0, 0, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0)), .Names = c("ID",
"Dx", "Month", "score"), row.names = c(NA, -15L), class = "data.frame")
>data
ID Dx Month score
1 1 1 0 0
2 1 1 6 0
3 1 1 12 0
4 1 1 18 1
5 1 1 24 1
6 2 1 0 1
7 2 1 6 1
8 2 2 12 1
9 2 2 18 0
10 2 2 24 1
11 3 1 0 0
12 3 1 6 0
13 3 1 12 0
14 3 1 18 0
15 3 1 24 0
假设我有上面的data.frame。我有3位患者(ID
=,1、2或3)。Dx
是诊断(Dx
= 1正常,= 2患病)。有一个月份变量。最后但并非最不重要的是测试分数变量。参与者的测试分数是二进制的,并且可以从0或1更改或从1还原为0。我很难找到一种可视化此数据的方法。我想要一个信息丰富的图表,它看起来:
在我的真实数据集中,我有800多个参与者,所以我不想构造800个单独的图...我认为测试分数变量为二进制确实让我感到困惑。任何帮助,将不胜感激。
注意:对于第2部分,需要完成以下许多数据操作。第1部分不太复杂,您可以在下面看到它。
用途
library(data.table)
library(ggplot2)
library(reshape2)
比较
首先,将Dx从1更改为2,再将0更改为1(假设分数的0对应于Dx的1)
data$Dx <- data$Dx - 1
现在,创建一个矩阵,该矩阵对于0诊断的1诊断返回1,对于1诊断0的诊断返回-1。
compare <- matrix(c(0,1,-1,0),ncol = 2,dimnames = list(c(0,1),c(0,1)))
> compare
0 1
0 0 -1
1 1 0
现在,让每个事件得分。这只是为矩阵中的每个条目查找上面的矩阵:
data$calc <- diag(compare[as.character(data$Dx),as.character(data$score)])
*注意:使用匹配可以加快大型矩阵的速度,但是对于像您这样的较小集合,这是快速解决方案
为了允许我们使用data.table
聚合:
data <- data.table(data)
现在我们需要创建变量:
tograph <- melt(data[, list(ScoreTrend = sum(score)/.N,
Type = sum(calc)/length(calc[calc != 0]),
Measure = sum(abs(calc))),
by = Month],
id.vars = c("Month"))
我们会沿着月份融化此数据框,以便创建一个构面图。
如果没有不正确的事件,我们将获得类型的NaN。要将其设置为0:
tograph[value == NaN, value := 0]
最后,我们可以绘制
ggplot(tograph, aes(x = Month, y = value)) + geom_line() + facet_wrap(~variable, ncol = 1)
现在,我们可以在一个图中看到:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句