How to Calculate Ratios in R (With Examples)

In R, ratios can be easily calculated with the help of the divide operator (/). To calculate a ratio, divide one number by another number, and the result will be the ratio in a decimal form. For example, to calculate the ratio of 10 to 20, divide 10 by 20 and the result will be 0.5. Ratios can also be calculated for more than two numbers by using the (/) operator as many times as necessary. For example, to calculate the ratio of 10, 20 and 30, divide 10 by 20, then divide the result by 30. The result will be 0.167, which is the ratio of the three numbers.


You can use the following methods to calculate the ratio between values in two columns in R:

Method 1: Use Base R

#calculate ratio between variable1 and variable2
df$ratio <- df$variable1/df$variable1

#calculate ratio between variable1 and variable2, rounded to 2 decimal places
df$ratio <- round(df$variable1/df$variable2, 2)

Method 2: Use dplyr

library(dplyr)

#calculate ratio between variable1 and variable2
df <- df %>%
        mutate(ratio = variable1/variable2)

#calculate ratio between variable1 and variable2, rounded to 2 decimal places
df <- df %>%
        mutate(ratio = round(variable1/variable2, 2))

This tutorial explains how to use each method in practice with the following data frame that shows the total shots made and attempted by various basketball players:

#create data frame
df <- data.frame(players=c('A', 'B', 'C', 'D', 'E', 'F', 'G', 'H'),
                 makes=c(4, 4, 3, 6, 7, 8, 3, 10),
                 attempts=c(12, 7, 5, 6, 10, 12, 5, 19))

#view data frame
df

  players makes attempts
1       A     4       12
2       B     4        7
3       C     3        5
4       D     6        6
5       E     7       10
6       F     8       12
7       G     3        5
8       H    10       19

Example 1: Calculate Ratios Using Base R

The following code shows how to calculate the ratio between the values in the makes and attempts columns using base R:

#calculate ratio between makes and attempts columns
df$ratio <- df$makes/df$attempts

#view updated data frame
df

  players makes attempts      ratio
1       A     4       12  0.3333333
2       B     4        7  0.5714286
3       C     3        5  0.6000000
4       D     6        6  1.0000000
5       E     7       10  0.7000000
6       F     8       12  0.6666667
7       G     3        5  0.6000000
8       H    10       19  0.5263158

The ratio of makes to attempts for the first player is 4 / 12 = 0.33.

In other words, the first player made about 33% of their shot attempts.

We can interpret the ratio values for every other player in a similar manner.

We can also use the round() function to round the ratio values to a certain number of decimal places:

#calculate ratio between makes and attempts columns, rounded to 2 decimal places
df$ratio <- round(df$makes/df$attempts, 2)

#view updated data frame
df

  players makes attempts ratio
1       A     4       12  0.33
2       B     4        7  0.57
3       C     3        5  0.60
4       D     6        6  1.00
5       E     7       10  0.70
6       F     8       12  0.67
7       G     3        5  0.60
8       H    10       19  0.53

Each of the values in the ratio column are now rounded to two decimal places.

Example 2: Calculate Ratios Using dplyr

library(dplyr)

#add new column that shows ratio of makes to attempts
df <- df %>%
        mutate(ratio = makes/attempts)

#view updated data frame
df

  players makes attempts      ratio
1       A     4       12  0.3333333
2       B     4        7  0.5714286
3       C     3        5  0.6000000
4       D     6        6  1.0000000
5       E     7       10  0.7000000
6       F     8       12  0.6666667
7       G     3        5  0.6000000
8       H    10       19  0.5263158

We can also use the round() function to round the ratio values to a certain number of decimal places:

library(dplyr)

#add new column that shows ratio of makes to attempts, rounded to 2 decimal places
df <- df %>%
        mutate(ratio = round(makes/attempts, 2))

#view updated data frame
df

  players makes attempts ratio
1       A     4       12  0.33
2       B     4        7  0.57
3       C     3        5  0.60
4       D     6        6  1.00
5       E     7       10  0.70
6       F     8       12  0.67
7       G     3        5  0.60
8       H    10       19  0.53

Each of the values in the ratio column are now rounded to two decimal places.

Notice that the base R method and the dplyr method produce the same results.

The following tutorials explain how to perform other common tasks in R:

x