Assuming x contains the data, taking the solutions so far and adding some minor improvements gives:
groups <- x %/% 10 lev <- min(groups):max(groups) lab <- factor( paste( lev, "0-", lev, "9", sep = "" ) ) groups <- factor( groups, lev = lev, lab = lab ) tab <- table( groups, dnn = "Range" ) as.data.frame( tab ) # for graphical output: bp <- barplot( tab ) text( bp, tab, tab, pos = 3, xpd = TRUE ) --- Date: Wed, 17 Mar 2004 16:55:19 +0200 From: Kai Hendry <[EMAIL PROTECTED]> To: <[EMAIL PROTECTED]> Subject: [R] Frequency table This must be FAQ, but I can't find it in archives or with a site search. I am trying to construct a frequency table. I guess this should be done with table. Or perhaps factor and split. Or prop.table. cut? findInterval? Argh! Please correct me if what I am looking for is not called a "frequency table". Perhaps it's called grouped data. > zz$x9 [1] 65 70 85 65 65 65 62 55 82 59 55 66 74 55 65 56 80 73 45 64 75 58 60 56 60 [26] 65 53 63 72 80 90 95 55 70 79 62 57 65 60 47 61 53 80 75 72 87 52 72 80 85 [51] 75 70 84 60 72 70 76 70 79 72 69 80 62 74 54 58 58 69 81 84 I (think) I want it to look like: 40-49 2 50-59 15 60-69 20 70-79 19 80-89 12 90-99 2 Or the other way around with transpose. classes = c("40-49", "50-59", "60-69", "70-79", "80-89", "90-99") For the rownames sum(zz$x9 > 40 & zz$x9 < 50) For getting frequency counts is very laborious... I got this far: > table(cut(zz$x9, brk)) (40,50] (50,60] (60,70] (70,80] (80,90] (90,100] 2 19 21 19 8 1 > brk [1] 40 50 60 70 80 90 100 > > t(table(cut(zz$x9, brk))) (40,50] (50,60] (60,70] (70,80] (80,90] (90,100] [1,] 2 19 21 19 8 1 Still feels a million miles off. Now I could do with a little help please after spending a couple of hours working this out. ______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html