[R] Reshape and column order

Ian Kennedy ian_kennedy at hc-sc.gc.ca
Wed Apr 11 16:15:58 CEST 2007


If I try to reshape a data frame into a long format with more than one
column it seems to mix up the column headings (or the columns, depending on
how you look at it). For example:
> d <-
data.frame(row=1:2,b.1=c("1b1","2b1"),b.2=c("1b2","2b2"),a.1=c("1a1","2a1"),a.2=c("1a2","2a2"))
> d
  row b.1 b.2 a.1 a.2
1   1 1b1 1b2 1a1 1a2
2   2 2b1 2b2 2a1 2a2

If I try reshape on this, the column headings are over the wrong columns:
> reshape(d,direction="long",idvar="row",varying=2:5)
    row time   b   a
1.1   1    1 1a1 1b1
2.1   2    1 2a1 2b1
1.2   1    2 1a2 1b2
2.2   2    2 2a2 2b2

If I reorder the columns, so the "a" columns come first, it reverses the
column names and gives the right result.
> e <- d[,c(1,4,5,2,3)]
> reshape(e,direction="long",idvar="row",varying=2:5)
    row time   a   b
1.1   1    1 1a1 1b1
2.1   2    1 2a1 2b1
1.2   1    2 1a2 1b2
2.2   2    2 2a2 2b2

I can also get the right result if I specify the "varying" parameter more
explicitly:
>
reshape(d,direction="long",idvar="row",varying=list(names(d)[2:3],names(d)[4:5]))
    row time b.1 a.1
1.1   1    1 1b1 1a1
2.1   2    1 2b1 2a1
1.2   1    2 1b2 1a2
2.2   2    2 2b2 2a2

I'm using R 2.4.1 on Windows XP.

Am I doing something wrong? Is it supposed to work like this?

Thanks, Ian



More information about the R-help mailing list