ModelView
假设我有上述data.frame。我有3名患者(>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
= 1,2或3)。 ID
是诊断(Dx
= 1是正常的,= 2是患病的)。有一个月变量。最后但并非最不重要的是,它是一个测试分数变量。参与者'测试分数是二进制的,它可以从0或1更改或从1还原为0.我无法想出一种可视化此数据的方法。我想看一个信息图:
在我的真实数据集中,我有超过800个参与者,所以我不想构建800个单独的图...我认为测试分数变量是二进制的确让我难过。任何帮助将不胜感激。
答案 0 :(得分:1)
注意:需要对第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,对0诊断的1检验返回-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 for Type。要将其设置为0:
tograph[value == NaN, value := 0]
最后,我们可以绘制
ggplot(tograph, aes(x = Month, y = value)) + geom_line() + facet_wrap(~variable, ncol = 1)
我们现在可以在一个情节中看到: