[R] reordering a data.frame
Gabor Grothendieck
ggrothendieck at gmail.com
Thu May 5 18:00:40 CEST 2005
On 5/5/05, Uwe Ligges <ligges at statistik.uni-dortmund.de> wrote:
> See ?reshape
>
> Uwe Ligges
>
>
> Achaz von Hardenberg wrote:
>
> > Hi,
> > I have a data.frame which looks like this:
> >
> > id est0 est1 est2 est3 est4 est5 est6 est7
> > 1 1 2 3 1 7 9 3 4
> > 2 4 1 1 7 6 5 1 2
> > [...]
> >
> >
> > I would like to reorder it to obtain the following:
> >
> > id est VALUE
> > 1 0 1
> > 1 1 2
> > 1 2 3
> > 1 3 1
> > 1 4 7
> > 1 5 9
> > 1 6 3
> > 1 7 4
> > 2 0 4
> > 2 1 1
> > 2 2 1
> > 2 3 7
> > 2 4 6
> > 2 5 5
> > 2 6 1
> > 2 7 2
> > [...]
I would probably use reshape as others have already pointed out
but just for the fun of it note that if you convert it from a data frame
to a matrix to a table to a data frame in this order:
data.frame ==> matrix ==> table ==> data.frame
We can get the result by using matrix() followed by as.data.frame.table()
(which converts it to table and then data frame all in one). The
one feature of this solution is that each step is relatively simple.
I assume the row and column ordering is important, given the Subject,
but if it is not then the second line can be simplified to
just: as.data.frame.table(mat, resp = "VALUE")
> mat <- matrix(unlist(dat[,-1]), nrow(dat), dimnames = list(id = dat$id, est = 0:7))
> as.data.frame.table(t(mat), resp = "VALUE")[c(2:1,3)]
id est VALUE
1 1 0 1
2 1 1 2
3 1 2 3
4 1 3 1
5 1 4 7
6 1 5 9
7 1 6 3
8 1 7 4
9 2 0 4
10 2 1 1
11 2 2 1
12 2 3 7
13 2 4 6
14 2 5 5
15 2 6 1
16 2 7 2
More information about the R-help
mailing list