Hi:

It would help if you named your variables such that alphanumeric ordering
doesn't disturb your variable ordering. Having been burned by this a few
times, I've learned the basics of sprintf() :) Here's your example
revisited, along with an alternative stacking/unstacking display with
package reshape.

library(reshape)
vnames <- paste('X', sprintf('%02d', c(1, 2, 10)), sep = '')
> vnames
[1] "X01" "X02" "X10"
testdata <- data.frame(1:5, 1:5, 1:5)
> names(testdata) <- vnames
> testdata
  X01 X02 X10
1   1   1   1
2   2   2   2
3   3   3   3
4   4   4   4
5   5   5   5
> melt(testdata)       # analogous to stack()
Using  as id variables
   variable value
1       X01     1
2       X01     2
3       X01     3
4       X01     4
5       X01     5
6       X02     1
7       X02     2
8       X02     3
9       X02     4
10      X02     5
11      X10     1
12      X10     2
13      X10     3
14      X10     4
15      X10     5
cast(melt(testdata), value ~ variable)  # analogous to unstack()
Using  as id variables
  value X01 X02 X10
1     1   1   1   1
2     2   2   2   2
3     3   3   3   3
4     4   4   4   4
5     5   5   5   5

HTH,
Dennis

On Sat, Mar 12, 2011 at 1:30 AM, Matthew Carroll <mjc...@york.ac.uk> wrote:

> Dear R users,
>
> I'm having some problems with the stack() and unstack() functions, and
> wondered if you could help.
>
>
>
> I have a large data frame (400 rows x 2000 columns), which I need to reduce
> to a single column of values (and therefore 800000 rows), so that I can use
> it in other operations (e.g., generating predictions from a GLM object).
> However, the problem I'm having can be reproduced with something as simple
> as this:
>
>
>
> > testdat <- data.frame("1" = c(1:5), "2" = c(1:5), "10" = c(1:5))
>
> > testdat
>
>  X1 X2 X10
>
> 1  1  1   1
>
> 2  2  2   2
>
> 3  3  3   3
>
> 4  4  4   4
>
> 5  5  5   5
>
>
>
> Please note that the numeric column names are what I'm dealing with in my
> real data frame too. Stacking into a long format works fine:
>
>
>
> > stacked <- stack(testdat)
>
> > stacked
>
>   values ind
>
> 1       1  X1
>
> 2       2  X1
>
> 3       3  X1
>
> 4       4  X1
>
> 5       5  X1
>
> 6       1  X2
>
> 7       2  X2
>
> 8       3  X2
>
> 9       4  X2
>
> 10      5  X2
>
> 11      1 X10
>
> 12      2 X10
>
> 13      3 X10
>
> 14      4 X10
>
> 15      5 X10
>
>
>
> But the problem I have comes in unstacking, when the order of the columns
> is
> changed from the original, to something alphabetical (i.e. X10 goes before
> X2):
>
>
>
> > unstacked <- unstack(stacked)
>
> > unstacked
>
>  X1 X10 X2
>
> 1  1   1  1
>
> 2  2   2  2
>
> 3  3   3  3
>
> 4  4   4  4
>
> 5  5   5  5
>
>
>
> Maintaining the order of columns is very important for me, as I'm dealing
> with spatial data.
>
> Is there a way of modifying the 'form' argument in unstack to maintain
> numerical ordering of columns? Or, is there a quick way of re-ordering the
> columns in a data frame into a numerical order? Alternatively, is there
> another function or package that could do this? I've tried reshape() but it
> seems very slow when I use my full data frame with it.
>
>
>
> Any help would be very much appreciated,
>
> Many thanks,
>
> Matthew Carroll
>
>
>
> --
>
> Matthew Carroll
>
> Department of Biology (Area 18),
>
> University of York,
>
> E-mail: mjc...@york.ac.uk
>
>
>
>
>        [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help@r-project.org 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.
>

        [[alternative HTML version deleted]]

______________________________________________
R-help@r-project.org 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 via email to