[R] cross tabulation: convert frequencies to percentages

Marc Schwartz marc_schwartz at comcast.net
Fri Feb 27 15:59:12 CET 2009

```on 02/27/2009 08:43 AM soeren.vogel at eawag.ch wrote:
> Hello,
>
> might be rather easy for R pros, but I've been searching to the dead end
> to ...
>
> twsource.area <- table(twsource, area, useNA="ifany")
>
> gives me a nice cross tabulation of frequencies of two factors, but now
> I want to convert to pecentages of those absolute values. In addition
> I'd like an extra column and an extra row with absolute sums. I know,
> Excel or the likes will produce it more easily, but how would the
> procedure look like in R?

See ?prop.table which is referenced in the See Also section of ?table.

This will give you proportions, so if you want percentages, just
multiply by 100.

To add row and column totals, see ?addmargins which is also in the See
Also for ?table

TAB <- table(state.division, state.region)

> TAB
state.region
state.division       Northeast South North Central West
New England                6     0             0    0
Middle Atlantic            3     0             0    0
South Atlantic             0     8             0    0
East South Central         0     4             0    0
West South Central         0     4             0    0
East North Central         0     0             5    0
West North Central         0     0             7    0
Mountain                   0     0             0    8
Pacific                    0     0             0    5

# Overall table proportions

> prop.table(TAB)
state.region
state.division       Northeast South North Central West
New England             0.12  0.00          0.00 0.00
Middle Atlantic         0.06  0.00          0.00 0.00
South Atlantic          0.00  0.16          0.00 0.00
East South Central      0.00  0.08          0.00 0.00
West South Central      0.00  0.08          0.00 0.00
East North Central      0.00  0.00          0.10 0.00
West North Central      0.00  0.00          0.14 0.00
Mountain                0.00  0.00          0.00 0.16
Pacific                 0.00  0.00          0.00 0.10

# Column proportions

> prop.table(TAB, 2)
state.region
state.division       Northeast     South North Central      West
New England        0.6666667 0.0000000     0.0000000 0.0000000
Middle Atlantic    0.3333333 0.0000000     0.0000000 0.0000000
South Atlantic     0.0000000 0.5000000     0.0000000 0.0000000
East South Central 0.0000000 0.2500000     0.0000000 0.0000000
West South Central 0.0000000 0.2500000     0.0000000 0.0000000
East North Central 0.0000000 0.0000000     0.4166667 0.0000000
West North Central 0.0000000 0.0000000     0.5833333 0.0000000
Mountain           0.0000000 0.0000000     0.0000000 0.6153846
Pacific            0.0000000 0.0000000     0.0000000 0.3846154

state.region
state.division       Northeast South North Central West Sum
New England                6     0             0    0   6
Middle Atlantic            3     0             0    0   3
South Atlantic             0     8             0    0   8
East South Central         0     4             0    0   4
West South Central         0     4             0    0   4
East North Central         0     0             5    0   5
West North Central         0     0             7    0   7
Mountain                   0     0             0    8   8
Pacific                    0     0             0    5   5
Sum                        9    16            12   13  50

HTH,

Marc Schwartz

```