[R] Using the shape () function

hadley wickham h.wickham at gmail.com
Tue Jun 17 16:52:07 CEST 2008


On Tue, Jun 17, 2008 at 9:28 AM, Tom Backer Johnsen <backer at psych.uib.no> wrote:
> In a research project we are using a web-based tools for collecting data
> from questionnaire.  The system generates files that are simple to read as a
> data frame in the "long" format, which are simple to convert to the  "wide"
> format.
>
> Something that might happen are: (a) there are two (multiple) references to
> the same cell, and (b) if there are missing values?  So, the data set has
> two references to S2/T2 and none to the S2/T1 combination:
>
>> d
>     values person time
>  1       1     S1   T1
>  2       2     S1   T2
>  3       3     S1   T3
>  4       4     S1   T4
>  5      22     S2   T2
>  6       6     S2   T2
>  7       7     S2   T3
>  8       8     S2   T4
>  9       9     S3   T1
>  10     10     S3   T2
>  11     11     S3   T3
>  12     12     S3   T4
> reshape (d, idvar="person", v.names=c("values"), timevar="time",
> direction="wide")
>   person values.T1 values.T2 values.T3 values.T4
>  1     S1         1         2         3         4
>  5     S2        NA        22         7         8
>  9     S3         9        10        11        12
>
> The missing cell gets an NA as expected.  But the surprise is in the case
> where there are two references to the same cell.  The the *first* is used
> (22 rather than 6).

You might try using the reshape package instead:

last <- function(x) x[length(x)]
names(d) <- c("value", "person", "time")
cast(d, person ~ time, last)

You can find out more at http://had.co.nz/reshape

Hadley


-- 
http://had.co.nz/



More information about the R-help mailing list