我一直在阅读R中的reshape2
包和其他包中的文档,用于重构从长到长格式的数据,反之亦然。但是,我坚持这个问题,因为我需要为时间创建一个新变量,并按时间对我的激素测量进行分组。我之前在SPSS中做过这个,虽然我正在切换到R
,其原因显而易见。我知道在R
中必须有一种简单的方法可以做到这一点,但我很难搞清楚这一点。
该项目的数据来自一项纵向临床研究,其中为每位患者在5个不同的时间点测量了20种不同的激素(示例化妆数据如下 - a1是激素' at' at访问1,a2是激素'访问2等等)。该研究共有20名患者,每个患者在电子表格(id)中都有唯一的标识符。激素数据(激素' a'激素''等)在我的电子表格中以如下广泛的形式安排:
> 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变量以及变量名称以将纵向测量折叠成。我会创建一个名为&#34的新变量;访问"这是从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
...
我尝试过使用重塑功能,但该功能似乎有效,但是当我查看实际数据时,数字在广泛格式和长格式之间变得混杂。我必须做一些非常基本的错误,但我很难搞清楚。
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")
答案 0 :(得分:0)
我认为你应该使用reshape()函数并使用参数timevar指定新的时间变量。
答案 1 :(得分:0)
可以使用melt
的开发版data.table
轻松完成此操作。安装devel版本的说明是here
。
我们转换了&#39; data.frame&#39;到&#39; data.table&#39; (setDT(df1)
)。然后,我们在patterns
的{{1}}参数中指定measure
以匹配多个melt
列。
measure
library(data.table)
dM <- melt(setDT(df1), measure=patterns(c('^a\\d+', '^b\\d+')),
value.name=c('a', 'b'), variable.name='visit')[order(id)]
dM
# id visit a b
# 1: 1 1 21 24
# 2: 1 2 50 90
# 3: 1 3 28 40
# 4: 1 4 19 35
# 5: 1 5 15 20
# 6: 2 1 23 25
# 7: 2 2 45 45
# 8: 2 3 15 34
# 9: 2 4 22 31
#10: 2 5 20 22
#11: 3 1 29 78
#12: 3 2 88 32
#13: 3 3 33 33
#14: 3 4 32 45
#15: 3 5 21 21
答案 2 :(得分:0)
以下是关于在长格式和宽格式之间转换数据的一个很好的总结。
Use R and SAS to reshape the data format: long to wide and wide to long
答案 3 :(得分:0)
使用基础R重塑:
res <- reshape(df1, direction = "long", varying = list(2:6, 7:11), idvar = "id",
v.names = c("a", "b"), timevar = "visit")
res[order(res$id),]
给出:
id visit a b
1.1 1 1 21 24
1.2 1 2 50 90
1.3 1 3 28 40
1.4 1 4 19 35
1.5 1 5 15 20
2.1 2 1 23 25
2.2 2 2 45 45
2.3 2 3 15 34
2.4 2 4 22 31
2.5 2 5 20 22
3.1 3 1 29 78
3.2 3 2 88 32
3.3 3 3 33 33
3.4 3 4 32 45
3.5 3 5 21 21