[R] reshape with two time variables

jim holtman jholtman at gmail.com
Sat Jan 31 01:56:26 CET 2009


This will work:

> x <- read.table(textConnection(" id      A1B1    A1B2    A2B1    A2B2
+ 1       1       400     475     420     510
+ 2       2       390     500     470     472
+ 3       3       428     512     555     610
+ 4       4       703     787     801     822
+ 5       5       611     634     721     705
+ 6       6       543     522     612     788
+ 7       7       411     488     506     623
+ 8       8       654     644     711     795"), header=TRUE)
> closeAllConnections()
> require(reshape)
> x.m <- melt(x, id='id')
> x.m$A <- sub("A(\\d+).*", "\\1", x.m$variable, perl=TRUE)
> x.m$B <- sub(".*B(\\d+)", "\\1", x.m$variable, perl=TRUE)
> x.m$variable <- NULL
> x.m
   id value A B
1   1   400 1 1
2   2   390 1 1
3   3   428 1 1
4   4   703 1 1
5   5   611 1 1
6   6   543 1 1
7   7   411 1 1
8   8   654 1 1
9   1   475 1 2
10  2   500 1 2
11  3   512 1 2
12  4   787 1 2
13  5   634 1 2
14  6   522 1 2
15  7   488 1 2
16  8   644 1 2
17  1   420 2 1
18  2   470 2 1
19  3   555 2 1
20  4   801 2 1
21  5   721 2 1
22  6   612 2 1
23  7   506 2 1
24  8   711 2 1
25  1   510 2 2
26  2   472 2 2
27  3   610 2 2
28  4   822 2 2
29  5   705 2 2
30  6   788 2 2
31  7   623 2 2
32  8   795 2 2


On Fri, Jan 30, 2009 at 6:57 PM, Neil Stewart
<neil.stewart at warwick.ac.uk> wrote:
> I have a data frame in wide format that I'd like to convert to long format.
> For example, in wide format I have:
>
>        id      A1B1    A1B2    A2B1    A2B2
> 1       1       400     475     420     510
> 2       2       390     500     470     472
> 3       3       428     512     555     610
> 4       4       703     787     801     822
> 5       5       611     634     721     705
> 6       6       543     522     612     788
> 7       7       411     488     506     623
> 8       8       654     644     711     795
>
> A is one repeated-measures variable with levels 1 and 2. B is a second
> repeated-measures variable also with levels 1 and 2. I'd like to end up
> with:
>
>        id      A       B       value
> 1       1       1       1       400
> 2       2       1       1       390
> 3       3       1       1       428
> 4       4       1       1       703
> 5       5       1       1       611
> 6       6       1       1       543
> 7       7       1       1       411
> 8       8       1       1       654
> 9       1       1       2       475
> 10      2       1       2       500
> 11      3       1       2       512
> 12      4       1       2       787
> 13      5       1       2       634
> 14      6       1       2       522
> 15      7       1       2       488
> 16      8       1       2       644
> 17      1       2       1       420
> 18      2       2       1       470
> 19      3       2       1       555
> 20      4       2       1       801
> 21      5       2       1       721
> 22      6       2       1       612
> 23      7       2       1       506
> 24      8       2       1       711
> 25      1       2       2       510
> 26      2       2       2       472
> 27      3       2       2       610
> 28      4       2       2       822
> 29      5       2       2       705
> 30      6       2       2       788
> 31      7       2       2       623
> 32      8       2       2       795
>
> I've been working with reshape and with the reshape package, but with no
> success for the two-time-variable case. Can anyone help please?
>
> ______________________________________________
> R-help at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
> and provide commented, minimal, self-contained, reproducible code.
>



-- 
Jim Holtman
Cincinnati, OH
+1 513 646 9390

What is the problem that you are trying to solve?




More information about the R-help mailing list