2.5 数据重塑
Next: Flat contingency tables,Previous: Using scan directly,Up: Spreadsheet-like data
2.5 数据重塑
有时,电子表格数据以一种紧凑的格式存在。它会给出各个受试者的协变量。而每个受试者后面跟着全部的观测值。R 的建模函数需要观测值在一列内。考虑下面来自有重复的MRI脑测试样本数据
Status Age V1 V2 V3 V4
P 23646 45190 50333 55166 56271
CC 26174 35535 38227 37911 41184
CC 27723 25691 25712 26144 26398
CC 27193 30949 29693 29754 30772
CC 24370 50542 51966 54341 54273
CC 28359 58591 58803 59435 61292
CC 25136 45801 45389 47197 47126
每个受试者有两个协变量(covariate)和最多4个测量。该数据从Excel里面导出,文件名为 mr.csv 。
zz <- read.csv("mr.csv", strip.white = TRUE)
zzz <- cbind(zz[gl(nrow(zz), 1, 4*nrow(zz)), 1:2], stack(zz[, 3:6]))
结果为
Status Age values ind
X1 P 23646 45190 V1
X2 CC 26174 35535 V1
X3 CC 27723 25691 V1
X4 CC 27193 30949 V1
X5 CC 24370 50542 V1
X6 CC 28359 58591 V1
X7 CC 25136 45801 V1
X11 P 23646 50333 V2
...
函数 unstack 是相反操作的函数,因此在导出数据时可能非常有效。
> reshape(zz, idvar="id",timevar="var",
varying=list(c("V1","V2","V3","V4")),direction="long")
Status Age var V1 id
1.1 P 23646 1 45190 1
2.1 CC 26174 1 35535 2
3.1 CC 27723 1 25691 3
4.1 CC 27193 1 30949 4
5.1 CC 24370 1 50542 5
6.1 CC 28359 1 58591 6
7.1 CC 25136 1 45801 7
1.2 P 23646 2 50333 1
2.2 CC 26174 2 38227 2
...
函数 reshape 有比stack 更为复杂的语法。但是它可以处理比前面例子中列的数目更多的`长'格式数据。利用 direction="wide",reshape也可以进行相反方向的操作。
Hits:Loading...
- Previous Page: 2.4 直接使用 scan 函数
- Next Page: 2.6 无格式列联表
