[R] Reshape Dataframe

Gabor Grothendieck ggrothendieck at gmail.com
Tue Dec 18 15:54:08 CET 2007


On Dec 18, 2007 9:07 AM, Bert Jacobs <b.jacobs at pandora.be> wrote:
>
> Hi,
>
> I'm having a bit of problems in creating a new dataframe.
> Below you'll find a description of the current dataframe and of the
> dataframe that needs to be created.
> Can someone help me out on this one?
> Thx in advance.
> Bert
>
> Current Dataframe
>
> Var1    Var2    Var3    Var4
> A       Fa      W1      1
> A       Si      W1      2
> A       Fa      W2      3
> A       Si      W3      4
> B       Si      W1      5
> C       La      W2      6
> C       Do      W4      7
>
> New Dataframe
>
> Var1    Var2    W1      W2      W3      W4
> A       Fa      1       3
> A       Si      2               4
> A       La
> A       Do
> B       Fa
> B       Si      5
> B       La
> B       Do
> C       Fa
> C       Si
> C       La              6
> C       Do                              7

Try this:

out <- ftable(xtabs(Var4 ~ Var1 + Var2 + Var3, DF))
out[out == 0] <- NA

Omit the last line is 0 fill is what you had wanted.

This will do it except that it will eliminate all rows
without data:

out2 <- reshape(DF, dir = "wide", timevar = "Var3", idvar = c("Var1", "Var2"))
out2[is.na(out2)] <- 0

Omit the last line if NA fill is what you wanted.

The reshape package melt/cast routines (see Hadley's solution in this
thread) can be used
to give a similar result to the reshape command above (i.e. all
missing rows are not
included) except that cast is a bit more flexible since it has a fill= argument.



More information about the R-help mailing list