R Advanced

How to Summarise Multiple Columns using dplyr in R

When we say summarise multiple columns, it means aggregate the input data by applying summary functions (sum, mean, max, etc.) to multiple numeric columns simultaneously.

The below image describes visually:

If grouping is required, you can group by a specific categorical column and get the statistics for each group.

The dplyr package provides the summarise() function that you can use to summarise multiple columns with or without groups. If you don’t use the group_by() function, it will calculate the results across the rows.

Here is the employee data frame we will use to create a summary for multiple columns:

library(dplyr)

employee_data <- data.frame(
  Employee_ID = c("E001", "E002", "E003", "E004", "E005", "E006", "E007"),
  Department = c("HR", "IT", "Finance", "HR", "IT", "HR", "Finance"),
  Salary = c(60000, 80000, 75000, 70000, 85000, 62000, 77000),
  Bonus = c(5000, 8000, 7500, 6000, 9000, 5500, 7000)
)

print(employee_data)

Summarize the entire data frame (without grouping)

Let’s calculate the mean of the salaries and the sum of bonuses for the entire dataset:

library(dplyr)

employee_data <- data.frame(
  Employee_ID = c("E001", "E002", "E003", "E004", "E005", "E006", "E007"),
  Department = c("HR", "IT", "Finance", "HR", "IT", "HR", "Finance"),
  Salary = c(60000, 80000, 75000, 70000, 85000, 62000, 77000),
  Bonus = c(5000, 8000, 7500, 6000, 9000, 5500, 7000)
)

print(employee_data)

# Summarizing Without Grouping (Entire Dataset)
# With multiple summary functions (mean and sum)

employee_data %>%
  summarise(
    Avg_Salary = mean(Salary),
    Sum_Bonus = sum(Bonus)
  )

The above output figure shows the average of the Salary column and the sum of the Bonus column.

We summarised two different columns with two different summary functions (mean and sum).

Summarizing by group using group_by()

Let’s summarize the Salary and Bonus columns grouped by the Department variable.

library(dplyr)

employee_data <- data.frame(
  Employee_ID = c("E001", "E002", "E003", "E004", "E005", "E006", "E007"),
  Department = c("HR", "IT", "Finance", "HR", "IT", "HR", "Finance"),
  Salary = c(60000, 80000, 75000, 70000, 85000, 62000, 77000),
  Bonus = c(5000, 8000, 7500, 6000, 9000, 5500, 7000)
)

print(employee_data)

# Summarizing by Group (Using group_by())
employee_data %>%
  group_by(Department) %>%
  summarize(
    mean_salary = mean(Salary),
    total_bonus = sum(Bonus),
    median_salary = median(Salary),
    sd_salary = sd(Salary),
    count = n() # Count of employees in each department
  )

The above figure demonstrates that we calculated the mean, median, and standard deviation of the Salary column and the sum of bonuses grouped by department. At last, counted the number of employees per department.

Using across() to summarise multiple numeric columns

The across() is a modern dplyr function that applies multiple functions to multiple columns. You can choose any of the summary functions like mean(), median(), quantile(), etc., for numeric columns.

library(dplyr)

employee_data <- data.frame(
  Employee_ID = c("E001", "E002", "E003", "E004", "E005", "E006", "E007"),
  Department = c("HR", "IT", "Finance", "HR", "IT", "HR", "Finance"),
  Salary = c(60000, 80000, 75000, 70000, 85000, 62000, 77000),
  Bonus = c(5000, 8000, 7500, 6000, 9000, 5500, 7000)
)

print(employee_data)


# Using Across() to summarise multiple numeric columns
employee_data %>%
  group_by(Department) %>%
  summarize(across(c(Salary, Bonus), list(
    mean = mean,
    sum = sum, median = median, sd = sd
  )))

The above figure shows that the across() function applies the sum() and mean() functions to the salary and bonus columns grouped by the department column.

That’s all!

Recent Posts

R scale(): Scaling and Centering of Matrix-like Objects

The scale() function in R centers (subtracting the mean) and/or scales (dividing by the standard…

2 weeks ago

file.rename(): Renaming Single and Multiple Files in R

To rename a file in R, you can use the file.rename() function. It renames a…

3 weeks ago

R prop.table() Function

The prop.table() function in R calculates the proportion or relative frequency of values in a…

3 weeks ago

exp() Function: Calculate Exponential of a Number in R

The exp() is a built-in function that calculates the exponential of its input, raising Euler's…

3 weeks ago

R split() Function: Splitting a Data

The split() function divides the input data into groups based on some criteria, typically specified…

4 weeks ago

colMeans(): Calculating the Mean of Columns in R Data Frame

The colMeans() function in R calculates the arithmetic mean of columns in a numeric matrix,…

1 month ago