tabulate#
Purpose#
Generates and returns two-way tables of frequencies.
Format#
- table_df = tabulate(data, formula[, tbCtl])#
- table_df = tabulate(filename, formula[, tbCtl])
- table_df = tabulate(df1, df2[, tbCtl])
- Parameters:
data (NxK dataframe) – Contains variables specified in formula.
formula (string) – formula string. E.g
"df1 ~ df2 + df3"
,"df1"
categories will be reported in rows, separate columns will be returned for each category in"df2"
and"df3"
.filename (string) – Name of file storing variables specifiec in formula.
df1 (Nx1 dataframe) – Contains variable whose categories will be reported in the rows of the frequency table.
df2 (NxK dataframe) – Contains variables whose categories will be reported in the cols of the frequency table.
tbctl (Struct) –
An optional
tabControl
structure with the following members:tbctl.exclude
String, the categories to be excluded from table counts. Totals will not include observations in excluded categories.
tbctl.unusedLevels
Scalar, indicates whether to include unused levels in table. Set to 0 to remove unused levels from the table. Default = 1.
tbctl.rowPercent
Scalar, indicates whether to report row percentages. Set to 1 to report row percentages. Default = 0.
tbctl.columnPercent
Scalar, indicates whether to report column percentages. Set to 1 to report column percentages. Default = 0.
- Returns:
df_long (Dataframe) – The input data converted to long form.
Examples#
Basic usage with a dataframe and a formula string#
// Load data
fname = getGAUSSHome("examples/tips2.dta");
tips2 = loadd(fname);
// Two-way table
call tabulate(tips2, "sex ~ smoker");
This reports the two-way frequency table:
============================================================
sex smoker Total
============================================================
No Yes
Female 55 33 88
Male 99 60 159
Total 154 93 247
============================================================
Tabulate can also generate multiple two-way frequency tables using the same data:
// Generate separate tables for sex vs smoker
// and sex vs time
call tabulate(tips2, "sex ~ smoker + time");
============================================================
sex smoker Total
============================================================
No Yes
Female 55 33 88
Male 99 60 159
Total 154 93 247
============================================================
sex time Total
============================================================
Lunch Dinner
Female 35 53 88
Male 33 126 159
Total 68 179 247
============================================================
Basic usage with a filename and a formula string#
The same tables can be directly generate from the filename
// Load data
fname = getGAUSSHome("examples/tips2.dta");
// Two-way table
call tabulate(fname, "sex ~ smoker");
============================================================
sex smoker Total
============================================================
No Yes
Female 55 33 88
Male 99 60 159
Total 154 93 247
============================================================
Tabulate separate dataframe vectors and assign the return value#
// Load all variables from the dataset
tips = loadd(getGAUSShome("examples/tips2.dta"));
// Create separate vectors for each variable
day = tips[.,"day"];
time_ = tips[.,"time"];
// Compute the frequency table and assign the result to 't'
t = tabulate(day, time_);
After running the above code, t will contain a dataframe with the frequencies. The totals will not be included:
print t;
day time_Lunch time_Dinner
Thur 61.000000 2.0000000
Fri 7.0000000 12.000000
Sat 0.0000000 89.000000
Sun 0.0000000 76.000000
Handling unrepresented categories#
In this example, we will load some data and then take a sample that does not contain any observations of a particular category level.
// Load two variables from the dataset
tips = loadd(getGAUSShome("examples/tips2.dta"), "smoker + day");
// Take the first 50 observations as a sample
tips = tips[1:50,.];
// Compute and print the frequency table
call tabulate(tips, "day ~ smoker");
In this case, the following will be printed:
============================================================
day smoker Total
============================================================
No Yes
Thur 0 0 0
Fri 0 0 0
Sat 23 0 23
Sun 27 0 27
Total 50 0 50
============================================================
In some situations, you may not want to report these unrepresented categories. In that case, you can use the unusedLevels
member of the tabControl
structure to supress those levels.
struct tabControl tbctl;
tbctl = tabControlCreate();
// Supress unrepresented categories
tbctl.unusedLevels = 0;
// Compute and print the frequency table
call tabulate(tips, "day ~ smoker", tbctl);
This time the report will omit the unrepresented levels.
=============================================
day smoker Total
=============================================
No
Sat 23 23
Sun 27 27
Total 50 50
=============================================
Reporting row or column percentages#
The tabControl
structure members tbCtl.rowPercent and tbCtl.columnPercent can be used to compute the row percentages or column perecentages, respectively.
struct tabControl tbctl;
tbctl = tabControlCreate();
// Report row percentages
tbctl.rowPercent = 1;
// Compute and print the frequency table
call tabulate(tips, "day ~ smoker", tbctl);
This will now report row percentages.
============================================================
day smoker Total
============================================================
No Yes
Thur 73.0 27.0 100
Fri 21.1 78.9 100
Sat 52.8 47.2 100
Sun 75.0 25.0 100
============================================================
Table reports row percentages.
See also
Functions frequency()
, plotFreq()