Re: [R] How to 'de-cross' a table?

From: Thomas Lumley <tlumley_at_u.washington.edu>
Date: Sat 04 Jun 2005 - 02:32:31 EST

On Fri, 3 Jun 2005, Sander Oom wrote:

> Dear R users,
>
> I have received a table in the following format:
>
> id a b c1 c2 d1 d2
> 1 1 1 65 97 78 98
> 2 1 2 65 97 42 97
> 3 2 1 65 68 97 98
> 4 2 2 65 97 97 98
>
> Factors of the design are: a, b, and e, where e has levels c and d. The
> levels c and d then have 2 replicates (r) each.
>
> Now I would like to get:
>
> id a b e r value
> 1 1 1 c 1 65
> 2 1 1 c 2 97
> 3 1 1 d 1 78
> 4 1 1 d 2 98
>
> Any suggestions on how to tackle this? I'm not sure what the 'task' is
> called, so struggle to effectively search the web or R help.
>

reshape() is the probably function. It seems you need to use it twice, for the two levels of uncrossing
> d1<-reshape(d, direction="long",

varying=list(c("c1","d1"),c("c2","d2")), v.names=c("rep1","rep2"),timevar="r", times=c("c","d"))
> d1

     id a b r rep1 rep2

1.c  1 1 1 c   65   97
2.c  2 1 2 c   65   97
3.c  3 2 1 c   65   68
4.c  4 2 2 c   65   97
1.d  1 1 1 d   78   98
2.d  2 1 2 d   42   97
3.d  3 2 1 d   97   98
4.d  4 2 2 d   97   98

> reshape(d1, direction="long", varying=list(c("rep1","rep2")),
v.names="value",idvar="tmp", timevar="r")

     id a b r value tmp

1.1  1 1 1 1    65   1
2.1  2 1 2 1    65   2
3.1  3 2 1 1    65   3
4.1  4 2 2 1    65   4
5.1  1 1 1 1    78   5
6.1  2 1 2 1    42   6
7.1  3 2 1 1    97   7
8.1  4 2 2 1    97   8
1.2  1 1 1 2    97   1
2.2  2 1 2 2    97   2
3.2  3 2 1 2    68   3
4.2  4 2 2 2    97   4
5.2  1 1 1 2    98   5
6.2  2 1 2 2    97   6
7.2  3 2 1 2    98   7
8.2  4 2 2 2    98   8

You can then delete the `tmp` variable if you don't need it.

An easier way to uncross would be with stack()
> stack(d[,4:7])

    values ind

1      65  c1
2      65  c1
3      65  c1
4      65  c1
5      97  c2
6      97  c2
7      68  c2
8      97  c2
9      78  d1
10     42  d1
11     97  d1
12     97  d1
13     98  d2
14     97  d2
15     98  d2
16     98  d2

but you lose the other variables.

         -thomas



R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Sat Jun 04 02:36:21 2005

This archive was generated by hypermail 2.1.8 : Fri 03 Mar 2006 - 03:32:22 EST