R can produce tables either of aggregate data or summary statistics. The most useful initial tables are raw counts +/- percentages, either of a single variable, with respect to two variables, or by groupings.

First we generate some data. The following code simulates the features of 100 patients in a clinical trial, including their ages, the centre they attended (A to E), the treatment they received (intervention or control).

clinical_trial <-
    data.frame(patient = 1:100,
               age = rnorm(100, mean = 60, sd = 6),
               treatment = gl(2, 50,
                 labels = c("Treatment", "Control")),
               centre = sample(paste("Centre", LETTERS[1:5]),
                 100, replace = TRUE))


clinical_trial[1:10, ]

patient	age	        treatment	centre
1	53.26911	Treatment	Centre E
2	72.55279	Treatment	Centre A
3	61.86786	Treatment	Centre E
4	59.87694	Treatment	Centre A
5	56.48190	Treatment	Centre E
6	53.63273	Treatment	Centre A
7	54.70294	Treatment	Centre A
8	69.42797	Treatment	Centre A
9	54.08574	Treatment	Centre E
10	47.69731	Treatment	Centre B

The simplest table we can create is a one way table of counts, e.g. based on whether patients received the intervention or the control treatment. The table() function produces a count of the specified column.


Treatment   Control 
       50        50 

To create a twoway table, simply list the variables in the preferred order. The 'dnn' option creates column and row variable labels for the table.

table(treatment, centre, dnn=c("TREATMENTS", "CENTRES"))

TREATMENTS  Centre A Centre B Centre C Centre D Centre E
  Treatment       11        6        7       10       16
  Control         11       16        7        9        7

Sometimes, we may wish to create an entirely new dataframe from the table.

centres<, centre),

treatment	centre	counts
Treatment	Centre A	11
Control	Centre A	11
Treatment	Centre B	6
Control	Centre B	16
Treatment	Centre C	7
Control	Centre C	7
Treatment	Centre D	10
Control	Centre D	9
Treatment	Centre E	16
Control	Centre E	7

For more advanced options, see the table() documentation online.