[R] Frequency table

Gabor Grothendieck ggrothendieck at myway.com
Wed Mar 17 19:13:30 CET 2004



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 <hendry at cs.helsinki.fi>
To:   <r-help at stat.math.ethz.ch> 
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.




More information about the R-help mailing list