我一直在阅读有关reshape2
R 和其他包中的包的文档,以将数据从宽格式重组为长格式,反之亦然。但是,我被困在这个问题上,因为我需要为时间创建一个新变量并按时间对我的激素测量值进行分组。我以前在 SPSS 中这样做过,尽管我正在切换到R
与许多其他人一样的明显原因。我知道必须有一种简单的方法可以做到这一点R
,但我无法弄清楚这一点。
该项目的数据来自一项纵向临床研究,其中在 5 个不同的时间点为每位患者测量了 20 种不同的激素(示例性数据如下 - a1 是第 1 次就诊时的激素“a”,a2 是激素“a” ' 在访问 2 等)。该研究共有 20 名患者,每个患者在电子表格 (id) 中都有唯一的标识符。激素数据(激素“a”、激素“b”等)在我的电子表格中以宽泛的形式排列如下:
> id a1 a2 a3 a4 a5 b1 b2 b3 b4 b5...
> 1 21 50 28 19 15 24 90 40 35 20...
> 2 23 45 15 22 20 25 45 34 31 22...
> 3 29 88 33 32 21 78 32 33 45 21...
...
当我之前在 SPSS 中执行此操作时,软件会提示我输入 id 变量以及变量名称以将纵向测量值折叠到其中。我会创建一个名为“visit”的新变量,它是从 1 到 5,对应于我对每种激素的 5 次测量。当我在 SPSS 中执行此操作时,它会以长格式创建一个新输出,如下所示:
> id visit a b
> 1 1 21 24
> 1 2 50 90
> 1 3 28 40
> 1 4 19 35
> 1 5 15 20
> 2 1 23 25
> 2 2 45 45
> 2 3 15 34
> 2 4 22 31
> 2 5 20 22
> 3 1 29 78
...
我尝试过使用 reshape,并且该功能似乎可以工作,但是当我查看实际数据时,数字在宽格式和长格式之间混淆了。我必须做一些非常基本的错误,但我很难弄清楚。
d_long <- reshape(d, varying = c("a1", "a2", "a3", "a4", "a5",
"b1", "b2", "b3", "b4", "b5"), v.names = c("a", "b"),
idvar = "id", times = c(1:5), direction = "long")