2.5 数据重塑

Keywords:

Next: ,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

我们可以用函数 stack 来帮助操作以给出唯一的相应。

     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,如

     > 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...

special topic