Often you may want to calculate descriptive statistics for each column in a data frame in R, grouped by a particular column.
One of the easiest ways to do so is by using the describeBy() function from the psych package in R, which can be used to perform this exact task.
The describeBy() function uses the following syntax:
describeBy(x, group=NULL, mat=FALSE, type=3, digits=15, …)
where:
- x: Name of data frame
- group: A grouping variable or list of grouping variables
- mat: Provide a matrix output rather than a list
- type: The type of skewness and kurtosis to find
- digits: Number of digits to report if matrix output is used
The following example shows how to use the describeBy() function in practice to calculate descriptive statistics grouped by a particular column in a data frame in R.
Note: Before using the describeBy() function, you may need to first install the psych package. You can use the following syntax to do so:
install.packages('psych')
Once the psych package has been installed, you can proceed to use the describeBy() function.
Example: How to Use the describeBy() Function in R
Suppose that we create the following data frame in R that contains information about various basketball players:
#create data frame
df <- data.frame(team=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'),
points=c(99, 68, 86, 88, 95, 74, 78, 93),
assists=c(22, 28, 31, 35, 34, 45, 28, 31),
rebounds=c(30, 28, 24, 24, 30, 36, 30, 29))
#view data frame
df
team points assists rebounds
1 A 99 22 30
2 A 68 28 28
3 A 86 31 24
4 A 88 35 24
5 B 95 34 30
6 B 74 45 36
7 B 78 28 30
8 B 93 31 29
The data frame contains the following information about eight different basketball players:
- team: The team they are on.
- points: Their total points scored in the season.
- assists: Their total assist in the season.
- rebounds: Their total rebounds in the season.
Suppose that we would like to calculate descriptive statistics for each of the numeric variables in the data frame, grouped by the values in the team column.
We can use the following syntax with the describeBy() function to do so:
library(psych)
#calculate descriptive statistics for numeric columns grouped by team
describeBy(df, group='team')
Descriptive statistics by group
group: A
vars n mean sd median trimmed mad min max range skew kurtosis
team* 1 4 1.00 0.00 1.0 1.00 0.00 1 1 0 NaN NaN
points 2 4 85.25 12.84 87.0 85.25 9.64 68 99 31 -0.30 -1.86
assists 3 4 29.00 5.48 29.5 29.00 5.19 22 35 13 -0.18 -1.97
rebounds 4 4 26.50 3.00 26.0 26.50 2.97 24 30 6 0.14 -2.28
se
team* 0.00
points 6.42
assists 2.74
rebounds 1.50
------------------------------------------------------------
group: B
vars n mean sd median trimmed mad min max range skew kurtosis
team* 1 4 1.00 0.00 1.0 1.00 0.00 1 1 0 NaN NaN
points 2 4 85.00 10.55 85.5 85.00 12.60 74 95 21 -0.03 -2.37
assists 3 4 34.50 7.42 32.5 34.50 4.45 28 45 17 0.51 -1.84
rebounds 4 4 31.25 3.20 30.0 31.25 0.74 29 36 7 0.70 -1.72
se
team* 0.00
points 5.28
assists 3.71
rebounds 1.60
The describeBy() function returns a variety of descriptive statistics for the points, assists and rebounds columns, grouped by the team column.
Note that descriptive statistics for the team column are still shown in the output of each group, despite being the variable that we grouped on. Feel free to ignore the descriptive statistics for these rows in the output.
By using the describeBy() function we are able to quickly summarize the most common descriptive statistics for the numeric variables in our data frame, grouped by a character column.
Additional Resources
The following tutorials explain how to perform other common tasks in R:
How to Create a Frequency Table by Group in R
How to Create a Frequency Polygon in R
How to Create Relative Frequency Tables in R