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
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. > ClausSomething 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. HTH, Marc Schwartz
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