reshape help

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|

reshape help

juli g. pausas
Hi,
I'm trying to use reshape but I cannot quite understand how it works.
Could somebody help me on this? Example, my data is something like:

mydat <- data.frame(tree= 1:10, serra=rep(1:2, c(5,5)), bt01= 101:110,
bt02= 201:210, bt03= 301:310,  mm01= 9101:9110, mm02= 9201:9210, mm03=
9301:9310)

> mydat
   tree serra bt01 bt02 bt03 mm01 mm02 mm03
1     1     1  101  201  301  9101  9201  9301
2     2     1  102  202  302  9102  9202  9302
3     3     1  103  203  303  9103  9203  9303
4     4     1  104  204  304  9104  9204  9304
5     5     1  105  205  305  9105  9205  9305
6     6     2  106  206  306  9106  9206  9306
7     7     2  107  207  307  9107  9207  9307
8     8     2  108  208  308  9108  9208  9308
9     9     2  109  209  309  9109  9209  9309
10   10     2  110  210  310  9110  9210  9310

that is, in the "wide form" with 2 constant variables (tree, serra)
and 6 variables that correspond to two variables (bt mm) measured in 3
years 01, 02, 03

I would like to reshaped the data to the long format as follows:

  tree serra   YEAR   bt   mm
     1     1    2001   101   9101
     2     1    2001   102   9102
     3     1    2001   103   9103
     4     1    2001   104   9104
     5     1    2001   105   9105
     6     2    2001   106   9106
     7     2    2001   107   9107
     8     2    2001   108   9108
     9     2    2001   109   9109
    10     2    2001   110   9110
     1     1    2002   201   9201
     2     1    2002   202   9202
     3     1    2002   203   9203
     4     1    2002   204   9204
     5     1    2002   205   9205
     6     2    2002   206   9206
     7     2    2002   207   9207
     8     2    2002   208   9208
     9     2    2002   209   9209
    10     2    2002   210   9210
     1     1    2003   301   9301
     2     1    2003   302   9302
     3     1    2003   303   9303
     4     1    2003   304   9304
     5     1    2003   305   9305
     6     2    2003   306   9306
     7     2    2003   307   9307
     8     2    2003   308   9308
     9     2    2003   309   9309
    10     2    2003   310   9310

I would appreciate if somebody let me know how could I do this with reshape
Thanks in advance

Juli


--
http://www.ceam.es/pausas

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: reshape help

Chuck Cleland
juli pausas wrote:

> Hi,
> I'm trying to use reshape but I cannot quite understand how it works.
> Could somebody help me on this? Example, my data is something like:
>
> mydat <- data.frame(tree= 1:10, serra=rep(1:2, c(5,5)), bt01= 101:110,
> bt02= 201:210, bt03= 301:310,  mm01= 9101:9110, mm02= 9201:9210, mm03=
> 9301:9310)
>
>> mydat
>    tree serra bt01 bt02 bt03 mm01 mm02 mm03
> 1     1     1  101  201  301  9101  9201  9301
> 2     2     1  102  202  302  9102  9202  9302
> 3     3     1  103  203  303  9103  9203  9303
> 4     4     1  104  204  304  9104  9204  9304
> 5     5     1  105  205  305  9105  9205  9305
> 6     6     2  106  206  306  9106  9206  9306
> 7     7     2  107  207  307  9107  9207  9307
> 8     8     2  108  208  308  9108  9208  9308
> 9     9     2  109  209  309  9109  9209  9309
> 10   10     2  110  210  310  9110  9210  9310
>
> that is, in the "wide form" with 2 constant variables (tree, serra)
> and 6 variables that correspond to two variables (bt mm) measured in 3
> years 01, 02, 03
>
> I would like to reshaped the data to the long format as follows:
>
>   tree serra   YEAR   bt   mm
>      1     1    2001   101   9101
>      2     1    2001   102   9102
>      3     1    2001   103   9103
>      4     1    2001   104   9104
>      5     1    2001   105   9105
>      6     2    2001   106   9106
>      7     2    2001   107   9107
>      8     2    2001   108   9108
>      9     2    2001   109   9109
>     10     2    2001   110   9110
>      1     1    2002   201   9201
>      2     1    2002   202   9202
>      3     1    2002   203   9203
>      4     1    2002   204   9204
>      5     1    2002   205   9205
>      6     2    2002   206   9206
>      7     2    2002   207   9207
>      8     2    2002   208   9208
>      9     2    2002   209   9209
>     10     2    2002   210   9210
>      1     1    2003   301   9301
>      2     1    2003   302   9302
>      3     1    2003   303   9303
>      4     1    2003   304   9304
>      5     1    2003   305   9305
>      6     2    2003   306   9306
>      7     2    2003   307   9307
>      8     2    2003   308   9308
>      9     2    2003   309   9309
>     10     2    2003   310   9310
>
> I would appreciate if somebody let me know how could I do this with reshape

reshape(mydat, varying = list(c("bt01","bt02","bt03"),
                              c("mm01","mm02","mm03")),
               v.names=c("bt","mm"),
               timevar = "YEAR",
               times = c(2001, 2002, 2003),
               idvar = "tree",
               direction = "long")

        tree serra YEAR  bt   mm
1.2001     1     1 2001 101 9101
2.2001     2     1 2001 102 9102
3.2001     3     1 2001 103 9103
4.2001     4     1 2001 104 9104
5.2001     5     1 2001 105 9105
6.2001     6     2 2001 106 9106
7.2001     7     2 2001 107 9107
8.2001     8     2 2001 108 9108
9.2001     9     2 2001 109 9109
10.2001   10     2 2001 110 9110
1.2002     1     1 2002 201 9201
2.2002     2     1 2002 202 9202
3.2002     3     1 2002 203 9203
4.2002     4     1 2002 204 9204
5.2002     5     1 2002 205 9205
6.2002     6     2 2002 206 9206
7.2002     7     2 2002 207 9207
8.2002     8     2 2002 208 9208
9.2002     9     2 2002 209 9209
10.2002   10     2 2002 210 9210
1.2003     1     1 2003 301 9301
2.2003     2     1 2003 302 9302
3.2003     3     1 2003 303 9303
4.2003     4     1 2003 304 9304
5.2003     5     1 2003 305 9305
6.2003     6     2 2003 306 9306
7.2003     7     2 2003 307 9307
8.2003     8     2 2003 308 9308
9.2003     9     2 2003 309 9309
10.2003   10     2 2003 310 9310

> Thanks in advance
>
> Juli

--
Chuck Cleland, Ph.D.
NDRI, Inc.
71 West 23rd Street, 8th floor
New York, NY 10010
tel: (212) 845-4495 (Tu, Th)
tel: (732) 512-0171 (M, W, F)
fax: (917) 438-0894

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: reshape help

Peter Dalgaard
Chuck Cleland wrote:

> juli pausas wrote:
>  
>> Hi,
>> I'm trying to use reshape but I cannot quite understand how it works.
>> Could somebody help me on this? Example, my data is something like:
>>
>> mydat <- data.frame(tree= 1:10, serra=rep(1:2, c(5,5)), bt01= 101:110,
>> bt02= 201:210, bt03= 301:310,  mm01= 9101:9110, mm02= 9201:9210, mm03=
>> 9301:9310)
>>
>>    
>>> mydat
>>>      
>>    tree serra bt01 bt02 bt03 mm01 mm02 mm03
>> 1     1     1  101  201  301  9101  9201  9301
>> 2     2     1  102  202  302  9102  9202  9302
>> 3     3     1  103  203  303  9103  9203  9303
>> 4     4     1  104  204  304  9104  9204  9304
>> 5     5     1  105  205  305  9105  9205  9305
>> 6     6     2  106  206  306  9106  9206  9306
>> 7     7     2  107  207  307  9107  9207  9307
>> 8     8     2  108  208  308  9108  9208  9308
>> 9     9     2  109  209  309  9109  9209  9309
>> 10   10     2  110  210  310  9110  9210  9310
>>
>> that is, in the "wide form" with 2 constant variables (tree, serra)
>> and 6 variables that correspond to two variables (bt mm) measured in 3
>> years 01, 02, 03
>>
>> I would like to reshaped the data to the long format as follows:
>>
>>   tree serra   YEAR   bt   mm
>>      1     1    2001   101   9101
>>      2     1    2001   102   9102
>>      3     1    2001   103   9103
>>      4     1    2001   104   9104
>>      5     1    2001   105   9105
>>      6     2    2001   106   9106
>>      7     2    2001   107   9107
>>      8     2    2001   108   9108
>>      9     2    2001   109   9109
>>     10     2    2001   110   9110
>>      1     1    2002   201   9201
>>      2     1    2002   202   9202
>>      3     1    2002   203   9203
>>      4     1    2002   204   9204
>>      5     1    2002   205   9205
>>      6     2    2002   206   9206
>>      7     2    2002   207   9207
>>      8     2    2002   208   9208
>>      9     2    2002   209   9209
>>     10     2    2002   210   9210
>>      1     1    2003   301   9301
>>      2     1    2003   302   9302
>>      3     1    2003   303   9303
>>      4     1    2003   304   9304
>>      5     1    2003   305   9305
>>      6     2    2003   306   9306
>>      7     2    2003   307   9307
>>      8     2    2003   308   9308
>>      9     2    2003   309   9309
>>     10     2    2003   310   9310
>>
>> I would appreciate if somebody let me know how could I do this with reshape
>>    
>
> reshape(mydat, varying = list(c("bt01","bt02","bt03"),
>                               c("mm01","mm02","mm03")),
>                v.names=c("bt","mm"),
>                timevar = "YEAR",
>                times = c(2001, 2002, 2003),
>                idvar = "tree",
>                direction = "long")
>  
Yup. 2.6.0 will also allow this simplified variant:

 > reshape(mydat, direction="long", varying=3:8, sep="")
     tree serra time  bt   mm id
1.1     1     1    1 101 9101  1
2.1     2     1    1 102 9102  2
3.1     3     1    1 103 9103  3
4.1     4     1    1 104 9104  4
5.1     5     1    1 105 9105  5
6.1     6     2    1 106 9106  6
7.1     7     2    1 107 9107  7
8.1     8     2    1 108 9108  8
9.1     9     2    1 109 9109  9
10.1   10     2    1 110 9110 10
1.2     1     1    2 201 9201  1
2.2     2     1    2 202 9202  2
3.2     3     1    2 203 9203  3
4.2     4     1    2 204 9204  4
5.2     5     1    2 205 9205  5
6.2     6     2    2 206 9206  6
7.2     7     2    2 207 9207  7
8.2     8     2    2 208 9208  8
9.2     9     2    2 209 9209  9
10.2   10     2    2 210 9210 10
1.3     1     1    3 301 9301  1
2.3     2     1    3 302 9302  2
3.3     3     1    3 303 9303  3
4.3     4     1    3 304 9304  4
5.3     5     1    3 305 9305  5
6.3     6     2    3 306 9306  6
7.3     7     2    3 307 9307  7
8.3     8     2    3 308 9308  8
9.3     9     2    3 309 9309  9
10.3   10     2    3 310 9310 10



--
   O__  ---- Peter Dalgaard             Øster Farimagsgade 5, Entr.B
  c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K
 (*) \(*) -- University of Copenhagen   Denmark          Ph:  (+45) 35327918
~~~~~~~~~~ - ([hidden email])                  FAX: (+45) 35327907

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: reshape help

Ross Darnell


-----Original Message-----
From: [hidden email] [mailto:[hidden email]] On Behalf Of Peter Dalgaard
Sent: Thursday, 13 September 2007 7:02 AM
To: Chuck Cleland
Cc: R-help; juli pausas
Subject: Re: [R] reshape help

Chuck Cleland wrote:

> juli pausas wrote:
>  
>> Hi,
>> I'm trying to use reshape but I cannot quite understand how it works.
>> Could somebody help me on this? Example, my data is something like:
>>
>> mydat <- data.frame(tree= 1:10, serra=rep(1:2, c(5,5)), bt01= 101:110,
>> bt02= 201:210, bt03= 301:310,  mm01= 9101:9110, mm02= 9201:9210, mm03=
>> 9301:9310)
>>
>>    
>>> mydat
>>>      
>>    tree serra bt01 bt02 bt03 mm01 mm02 mm03
>> 1     1     1  101  201  301  9101  9201  9301
>> 2     2     1  102  202  302  9102  9202  9302
>> 3     3     1  103  203  303  9103  9203  9303
>> 4     4     1  104  204  304  9104  9204  9304
>> 5     5     1  105  205  305  9105  9205  9305
>> 6     6     2  106  206  306  9106  9206  9306
>> 7     7     2  107  207  307  9107  9207  9307
>> 8     8     2  108  208  308  9108  9208  9308
>> 9     9     2  109  209  309  9109  9209  9309
>> 10   10     2  110  210  310  9110  9210  9310
>>
>> that is, in the "wide form" with 2 constant variables (tree, serra)
>> and 6 variables that correspond to two variables (bt mm) measured in 3
>> years 01, 02, 03
>>
>> I would like to reshaped the data to the long format as follows:
>>
>>   tree serra   YEAR   bt   mm
>>      1     1    2001   101   9101
>>      2     1    2001   102   9102
>>      3     1    2001   103   9103
>>      4     1    2001   104   9104
>>      5     1    2001   105   9105
>>      6     2    2001   106   9106
>>      7     2    2001   107   9107
>>      8     2    2001   108   9108
>>      9     2    2001   109   9109
>>     10     2    2001   110   9110
>>      1     1    2002   201   9201
>>      2     1    2002   202   9202
>>      3     1    2002   203   9203
>>      4     1    2002   204   9204
>>      5     1    2002   205   9205
>>      6     2    2002   206   9206
>>      7     2    2002   207   9207
>>      8     2    2002   208   9208
>>      9     2    2002   209   9209
>>     10     2    2002   210   9210
>>      1     1    2003   301   9301
>>      2     1    2003   302   9302
>>      3     1    2003   303   9303
>>      4     1    2003   304   9304
>>      5     1    2003   305   9305
>>      6     2    2003   306   9306
>>      7     2    2003   307   9307
>>      8     2    2003   308   9308
>>      9     2    2003   309   9309
>>     10     2    2003   310   9310
>>
>> I would appreciate if somebody let me know how could I do this with reshape
>>    
>
> reshape(mydat, varying = list(c("bt01","bt02","bt03"),
>                               c("mm01","mm02","mm03")),
>                v.names=c("bt","mm"),
>                timevar = "YEAR",
>                times = c(2001, 2002, 2003),
>                idvar = "tree",
>                direction = "long")
>  
Yup. 2.6.0 will also allow this simplified variant:

 > reshape(mydat, direction="long", varying=3:8, sep="")
     tree serra time  bt   mm id
1.1     1     1    1 101 9101  1
2.1     2     1    1 102 9102  2
3.1     3     1    1 103 9103  3
4.1     4     1    1 104 9104  4
5.1     5     1    1 105 9105  5
6.1     6     2    1 106 9106  6
7.1     7     2    1 107 9107  7
8.1     8     2    1 108 9108  8
9.1     9     2    1 109 9109  9
10.1   10     2    1 110 9110 10
1.2     1     1    2 201 9201  1
2.2     2     1    2 202 9202  2
3.2     3     1    2 203 9203  3
4.2     4     1    2 204 9204  4
5.2     5     1    2 205 9205  5
6.2     6     2    2 206 9206  6
7.2     7     2    2 207 9207  7
8.2     8     2    2 208 9208  8
9.2     9     2    2 209 9209  9
10.2   10     2    2 210 9210 10
1.3     1     1    3 301 9301  1
2.3     2     1    3 302 9302  2
3.3     3     1    3 303 9303  3
4.3     4     1    3 304 9304  4
5.3     5     1    3 305 9305  5
6.3     6     2    3 306 9306  6
7.3     7     2    3 307 9307  7
8.3     8     2    3 308 9308  8
9.3     9     2    3 309 9309  9
10.3   10     2    3 310 9310 10



--
   O__  ---- Peter Dalgaard             Øster Farimagsgade 5, Entr.B
  c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K
 (*) \(*) -- University of Copenhagen   Denmark          Ph:  (+45) 35327918
~~~~~~~~~~ - ([hidden email])                  FAX: (+45) 35327907


[Ross D]

That's neat but how did the function recognize the difference between the 3:5 and 6:8 structure?

Ross Darnell
______________________________________________
[hidden email] 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.

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: reshape help

François Pinard
[Ross Darnell]

>>> I'm trying to use reshape but I cannot quite understand how it
>>> works.

>Yup. 2.6.0 will also allow this simplified variant:

> > reshape(mydat, direction="long", varying=3:8, sep="")
> > [...]

Hi, people.  Have "melt" and "cast" (from the "reshape" package) ever
been considered for integration in R "stats" package (or any convenient
standardly distributed package)?  They gave me the impression of being
neatly specified, and presumably useful for many of us.

--
François Pinard   http://pinard.progiciels-bpi.ca

______________________________________________
[hidden email] 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.
Reply | Threaded
Open this post in threaded view
|

Re: reshape help

Peter Dalgaard
In reply to this post by Ross Darnell
Ross Darnell wrote:

>  
>  
> Yup. 2.6.0 will also allow this simplified variant:
>
>  > reshape(mydat, direction="long", varying=3:8, sep="")
>      tree serra time  bt   mm id
> 1.1     1     1    1 101 9101  1
> 2.1     2     1    1 102 9102  2
> 3.1     3     1    1 103 9103  3
>  

[Ross D]

That's neat but how did the function recognize the difference between the 3:5 and 6:8 structure?

Ross Darnell

(Ross: Your emailer put your reply into my original signature, making it
unquotable without cut&paste. Don't do that....)

It looks at the variable names (the current version can do that as well,
but the case where the separator is not a dot is less easy to specify).

--
   O__  ---- Peter Dalgaard             Øster Farimagsgade 5, Entr.B
  c/ /'_ --- Dept. of Biostatistics     PO Box 2099, 1014 Cph. K
 (*) \(*) -- University of Copenhagen   Denmark          Ph:  (+45) 35327918
~~~~~~~~~~ - ([hidden email])                  FAX: (+45) 35327907

______________________________________________
[hidden email] 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.