[Rd] Re: desiderata for data manipulation

A.J. Rossini rossini@blindglobe.net
01 Nov 2000 05:42:15 -0800

>>>>> "MM" == Martin Maechler <maechler@stat.math.ethz.ch> writes:

    MM> [diverted from R-help to R-devel]
>>>>> "tony" == A J Rossini <rossini@blindglobe.net> writes:

>>>>> "ZC" == Zsombor Cseres-Gergely <z.cseres-gergely@ucl.ac.uk> writes:

    ZC> .........  But how do you exchange datafiles? Dump to ascii
    ZC> and infile?

    tony> Required helpful R-related content:

    tony> Much, much easier.  Look for the stataread package at CRAN.
    tony> (at least until R gets a nice set of longitudinal macros,
    tony> I'll continue to enjoy Stata's "reshape" command for data
    tony> manipulation)

    MM> Dear Tony, can you elaborate what you are missing here for R?

In R, it would be a simple command to reshape a dataframe, from a
single-observation per individual (or other unit having repeated
measurements) to multiple lines (one per measurement).  Quite often,
in building models, I'll switch between wide/long versions of the data
set to build useful variables for modeling.

Here's the help file of my favorite (missing from R) data manipulation

help for reshape                                         (manual:  [R] reshape)

Convert data from wide to long and vice versa

Basic syntax:

        reshape wide varnames, i(varlist) [ j(varname [values]) ... ]
        reshape long varnames, i(varlist) [ j(varname [values]) ... ]

        reshape wide
        reshape long

        reshape error

                values is           #[-#] [#[-#] ...]
                ... is              string atwl(chars)

        Both are seldom specified.
Advanced syntax:
        reshape i   varlist
        reshape j   varname [#[-#] [#[-#] ...]] [, string]
        reshape xij fvarnames [, atwl(chars)]
        reshape xi  [varlist]
        reshape [query]
        reshape wide
        reshape long
        reshape error
        reshape clear
        where fvarnames are either varnames, varnames with @ characters, or a
                mix of the two.  The @ character denotes where the # (j) suffix
reshape converts data from wide to long form and vice versa.  Think of the data
as a collection of observations x_ij.  One such collection might be
                 (wide form)                          (long form)
        -i-       ------- x_ij --------         -i-  -j-         -x_ij-
        id  sex   inc80   inc81   inc82         id   year   sex    inc
        -------------------------------         ----------------------
         1    0    5000    5500    6000          1     80     0   5000
         2    1    2000    2200    3300          1     81     0   5500
         3    0    3000    2000    1000          1     82     0   6000
                                                 2     80     1   2000
                                                 2     81     1   2200
                                                 2     82     1   3300
                                                 3     80     0   3000
                                                 3     81     0   2000
                                                 3     82     0   1000
reshape converts data from one form to the other:
        . reshape long inc, i(id) j(year)      (goes from left-form to right)
        . reshape wide inc, i(id) j(year)      (goes from right-form to left)
See [R] reshape for a detailed discussion and examples for both the basic and
advanced syntax.
i(varlist) specifies the variable(s) whose unique values denote a logical
j(varname [values]) specifies the variable whose unique values denote a sub-
    observation.  values list the unique values to be used from varname and
    typically is not explicitly stated since reshape will determine them
    automatically from the data.
string specifies that the j() may contain string values.
atwl(chars) specifies that chars should be substituted for the @ character when
    converting the data to the long form.
 . reshape long inc ue, i(id) j(year)             converts from wide to long
 . reshape wide                                   converts back to wide
 . reshape ..., i(id)                             one i() variable
 . reshape ..., i(hid pid)                        two i() variables
 . reshape long inc, i(id) j(year 80-82 85)       specifying j() values
 . reshape long inc, i(id) j(sex) string          allow string var. in j()

A.J. Rossini				Rsrch. Asst. Prof. of Biostatistics
BlindGlobe Networks (home/default)	rossini@blindglobe.net	
UW Biostat/Center for AIDS Research	rossini@u.washington.edu	
FHCRC/SCHARP/HIV Vaccine Trials Net	rossini@scharp.org

FHCRC: M/Tu: 206-667-7025 (fax=4812) | Voicemail is pretty sketchy
CFAR:   W/F: 206-731-3647 (fax=3694) | Email is far better than phone
UW:    Th/F: 206-543-1044 (fax=3286) | Change last 4 digits of phone for fax
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch