[R] sort table
Marc Schwartz
MSchwartz at mn.rr.com
Sat Nov 5 18:56:19 CET 2005
On Sat, 2005-11-05 at 11:44 -0600, Marc Schwartz wrote:
> On Sat, 2005-11-05 at 18:04 +0100, Claus Atzenbeck wrote:
> > Hi,
> >
> > I have a data frame named "questions" that I use to get a subset and
> > then a table:
> >
> > failcondonly <- subset(questions, errorreason=="condition")
> > failcondtab <- table(failcondonly$type, failcondonly$qid, exclude=c("ORGA", "skipped"))
> >
> > The failcondtab looks like this:
> >
> > 6 11 12 13 14 15 17 26 30 31 39 41
> > gave up 0 1 1 1 1 0 0 0 0 8 0 2
> > wrong 3 3 7 3 3 1 4 1 3 4 1 2
> >
> > I want to sort this table according to the *sum* of the values in "gave
> > up" and "wrong" in reverse order. The highest value should be first.
> > First would be column "31" (value 8+4=12), then column "12" (value
> > 1+7=8), etc.
> >
> > sort(failcondtab) does not help, since it sorts the column names, not
> > the sum of the values of each column.
> >
> > Thanks for any hint.
> > Claus
>
>
> Something like the following should work:
>
> > failcondtab[, rev(order(colSums(failcondtab)))]
> 31 12 41 17 14 13 11 30 6 39 26 15
> gave up 8 1 2 0 1 1 1 0 0 0 0 0
> wrong 4 7 2 4 3 3 3 3 3 1 1 1
>
>
> See ?order, ?rev and ?colSums.
Or another, better variation, would be:
> failcondtab[, order(colSums(failcondtab), decreasing = TRUE)]
31 12 11 13 14 17 41 6 30 15 26 39
gave up 8 1 1 1 1 0 2 0 0 0 0 0
wrong 4 7 3 3 3 4 2 3 3 1 1 1
which removes the requirement to use rev().
Marc
More information about the R-help
mailing list