Introduction to dplyr

data-manipulation
tidyverse
Learn the basics of data manipulation with the dplyr package in R
Published

March 30, 2025

Introduction to dplyr

The dplyr package is part of the tidyverse and provides a grammar for data manipulation in R. It makes data transformation tasks more intuitive and readable.

Getting Started with dplyr

First, let’s install and load the package:

# Install if needed (uncomment to run)
# install.packages("dplyr")
# install.packages("tibble")

# Load the packages
library(dplyr)
library(tibble)  # For rownames_to_column function

# We'll use the built-in mtcars dataset
data(mtcars)
glimpse(mtcars)
Rows: 32
Columns: 11
$ mpg  <dbl> 21.0, 21.0, 22.8, 21.4, 18.7, 18.1, 14.3, 24.4, 22.8, 19.2, 17.8,…
$ cyl  <dbl> 6, 6, 4, 6, 8, 6, 8, 4, 4, 6, 6, 8, 8, 8, 8, 8, 8, 4, 4, 4, 4, 8,…
$ disp <dbl> 160.0, 160.0, 108.0, 258.0, 360.0, 225.0, 360.0, 146.7, 140.8, 16…
$ hp   <dbl> 110, 110, 93, 110, 175, 105, 245, 62, 95, 123, 123, 180, 180, 180…
$ drat <dbl> 3.90, 3.90, 3.85, 3.08, 3.15, 2.76, 3.21, 3.69, 3.92, 3.92, 3.92,…
$ wt   <dbl> 2.620, 2.875, 2.320, 3.215, 3.440, 3.460, 3.570, 3.190, 3.150, 3.…
$ qsec <dbl> 16.46, 17.02, 18.61, 19.44, 17.02, 20.22, 15.84, 20.00, 22.90, 18…
$ vs   <dbl> 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 0,…
$ am   <dbl> 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0,…
$ gear <dbl> 4, 4, 4, 3, 3, 3, 3, 4, 4, 4, 4, 3, 3, 3, 3, 3, 3, 4, 4, 4, 3, 3,…
$ carb <dbl> 4, 4, 1, 1, 2, 1, 4, 2, 2, 4, 4, 3, 3, 3, 4, 4, 4, 1, 2, 1, 1, 2,…

The Main dplyr Verbs

dplyr is built around a set of core verbs (functions) that perform common data manipulation tasks:

1. filter() - Subset rows based on conditions

# Select cars with 6 cylinders
filter(mtcars, cyl == 6)
                mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Mazda RX4      21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag  21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Hornet 4 Drive 21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
Valiant        18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
Merc 280       19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
Merc 280C      17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
Ferrari Dino   19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
# Multiple conditions: cars with 6 cylinders AND mpg > 20
filter(mtcars, cyl == 6, mpg > 20)
                mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4      21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag  21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Hornet 4 Drive 21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
# OR conditions
filter(mtcars, cyl == 6 | mpg > 30)
                mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Mazda RX4      21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag  21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Hornet 4 Drive 21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
Valiant        18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
Merc 280       19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
Merc 280C      17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
Fiat 128       32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
Honda Civic    30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
Toyota Corolla 33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
Lotus Europa   30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
Ferrari Dino   19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6

2. select() - Pick columns by name

# Select specific columns
select(mtcars, mpg, cyl, hp)
                     mpg cyl  hp
Mazda RX4           21.0   6 110
Mazda RX4 Wag       21.0   6 110
Datsun 710          22.8   4  93
Hornet 4 Drive      21.4   6 110
Hornet Sportabout   18.7   8 175
Valiant             18.1   6 105
Duster 360          14.3   8 245
Merc 240D           24.4   4  62
Merc 230            22.8   4  95
Merc 280            19.2   6 123
Merc 280C           17.8   6 123
Merc 450SE          16.4   8 180
Merc 450SL          17.3   8 180
Merc 450SLC         15.2   8 180
Cadillac Fleetwood  10.4   8 205
Lincoln Continental 10.4   8 215
Chrysler Imperial   14.7   8 230
Fiat 128            32.4   4  66
Honda Civic         30.4   4  52
Toyota Corolla      33.9   4  65
Toyota Corona       21.5   4  97
Dodge Challenger    15.5   8 150
AMC Javelin         15.2   8 150
Camaro Z28          13.3   8 245
Pontiac Firebird    19.2   8 175
Fiat X1-9           27.3   4  66
Porsche 914-2       26.0   4  91
Lotus Europa        30.4   4 113
Ford Pantera L      15.8   8 264
Ferrari Dino        19.7   6 175
Maserati Bora       15.0   8 335
Volvo 142E          21.4   4 109
# Select a range of columns
select(mtcars, mpg:hp)
                     mpg cyl  disp  hp
Mazda RX4           21.0   6 160.0 110
Mazda RX4 Wag       21.0   6 160.0 110
Datsun 710          22.8   4 108.0  93
Hornet 4 Drive      21.4   6 258.0 110
Hornet Sportabout   18.7   8 360.0 175
Valiant             18.1   6 225.0 105
Duster 360          14.3   8 360.0 245
Merc 240D           24.4   4 146.7  62
Merc 230            22.8   4 140.8  95
Merc 280            19.2   6 167.6 123
Merc 280C           17.8   6 167.6 123
Merc 450SE          16.4   8 275.8 180
Merc 450SL          17.3   8 275.8 180
Merc 450SLC         15.2   8 275.8 180
Cadillac Fleetwood  10.4   8 472.0 205
Lincoln Continental 10.4   8 460.0 215
Chrysler Imperial   14.7   8 440.0 230
Fiat 128            32.4   4  78.7  66
Honda Civic         30.4   4  75.7  52
Toyota Corolla      33.9   4  71.1  65
Toyota Corona       21.5   4 120.1  97
Dodge Challenger    15.5   8 318.0 150
AMC Javelin         15.2   8 304.0 150
Camaro Z28          13.3   8 350.0 245
Pontiac Firebird    19.2   8 400.0 175
Fiat X1-9           27.3   4  79.0  66
Porsche 914-2       26.0   4 120.3  91
Lotus Europa        30.4   4  95.1 113
Ford Pantera L      15.8   8 351.0 264
Ferrari Dino        19.7   6 145.0 175
Maserati Bora       15.0   8 301.0 335
Volvo 142E          21.4   4 121.0 109
# Select all columns except some
select(mtcars, -gear, -carb)
                     mpg cyl  disp  hp drat    wt  qsec vs am
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1
Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0
Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0
Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0
Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0
Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0
Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0
Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0
Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0
Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0
Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0
Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0
Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0
Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0
Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0
Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1
Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1
Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1
Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0
Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0
AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0
Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0
Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0
Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1
Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1
Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1
Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1
Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1
Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1
Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1
# Rename columns while selecting
select(mtcars, miles_per_gallon = mpg, cylinders = cyl)
                    miles_per_gallon cylinders
Mazda RX4                       21.0         6
Mazda RX4 Wag                   21.0         6
Datsun 710                      22.8         4
Hornet 4 Drive                  21.4         6
Hornet Sportabout               18.7         8
Valiant                         18.1         6
Duster 360                      14.3         8
Merc 240D                       24.4         4
Merc 230                        22.8         4
Merc 280                        19.2         6
Merc 280C                       17.8         6
Merc 450SE                      16.4         8
Merc 450SL                      17.3         8
Merc 450SLC                     15.2         8
Cadillac Fleetwood              10.4         8
Lincoln Continental             10.4         8
Chrysler Imperial               14.7         8
Fiat 128                        32.4         4
Honda Civic                     30.4         4
Toyota Corolla                  33.9         4
Toyota Corona                   21.5         4
Dodge Challenger                15.5         8
AMC Javelin                     15.2         8
Camaro Z28                      13.3         8
Pontiac Firebird                19.2         8
Fiat X1-9                       27.3         4
Porsche 914-2                   26.0         4
Lotus Europa                    30.4         4
Ford Pantera L                  15.8         8
Ferrari Dino                    19.7         6
Maserati Bora                   15.0         8
Volvo 142E                      21.4         4

3. mutate() - Create new columns

# Add a new column
mutate(mtcars, 
       kpl = mpg * 0.425,  # Convert mpg to km per liter
       hp_per_cyl = hp / cyl)
                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb     kpl
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4  8.9250
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4  8.9250
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1  9.6900
Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1  9.0950
Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2  7.9475
Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1  7.6925
Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4  6.0775
Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2 10.3700
Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2  9.6900
Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4  8.1600
Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4  7.5650
Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3  6.9700
Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3  7.3525
Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3  6.4600
Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4  4.4200
Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4  4.4200
Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4  6.2475
Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1 13.7700
Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2 12.9200
Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1 14.4075
Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1  9.1375
Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2  6.5875
AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2  6.4600
Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4  5.6525
Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2  8.1600
Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1 11.6025
Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2 11.0500
Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2 12.9200
Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4  6.7150
Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6  8.3725
Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8  6.3750
Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2  9.0950
                    hp_per_cyl
Mazda RX4             18.33333
Mazda RX4 Wag         18.33333
Datsun 710            23.25000
Hornet 4 Drive        18.33333
Hornet Sportabout     21.87500
Valiant               17.50000
Duster 360            30.62500
Merc 240D             15.50000
Merc 230              23.75000
Merc 280              20.50000
Merc 280C             20.50000
Merc 450SE            22.50000
Merc 450SL            22.50000
Merc 450SLC           22.50000
Cadillac Fleetwood    25.62500
Lincoln Continental   26.87500
Chrysler Imperial     28.75000
Fiat 128              16.50000
Honda Civic           13.00000
Toyota Corolla        16.25000
Toyota Corona         24.25000
Dodge Challenger      18.75000
AMC Javelin           18.75000
Camaro Z28            30.62500
Pontiac Firebird      21.87500
Fiat X1-9             16.50000
Porsche 914-2         22.75000
Lotus Europa          28.25000
Ford Pantera L        33.00000
Ferrari Dino          29.16667
Maserati Bora         41.87500
Volvo 142E            27.25000
# Modify existing columns and add new ones
mutate(mtcars,
       mpg = mpg * 0.425,  # Overwrite mpg with km per liter
       efficiency = mpg / wt)
                        mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Mazda RX4            8.9250   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag        8.9250   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Datsun 710           9.6900   4 108.0  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive       9.0950   6 258.0 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout    7.9475   8 360.0 175 3.15 3.440 17.02  0  0    3    2
Valiant              7.6925   6 225.0 105 2.76 3.460 20.22  1  0    3    1
Duster 360           6.0775   8 360.0 245 3.21 3.570 15.84  0  0    3    4
Merc 240D           10.3700   4 146.7  62 3.69 3.190 20.00  1  0    4    2
Merc 230             9.6900   4 140.8  95 3.92 3.150 22.90  1  0    4    2
Merc 280             8.1600   6 167.6 123 3.92 3.440 18.30  1  0    4    4
Merc 280C            7.5650   6 167.6 123 3.92 3.440 18.90  1  0    4    4
Merc 450SE           6.9700   8 275.8 180 3.07 4.070 17.40  0  0    3    3
Merc 450SL           7.3525   8 275.8 180 3.07 3.730 17.60  0  0    3    3
Merc 450SLC          6.4600   8 275.8 180 3.07 3.780 18.00  0  0    3    3
Cadillac Fleetwood   4.4200   8 472.0 205 2.93 5.250 17.98  0  0    3    4
Lincoln Continental  4.4200   8 460.0 215 3.00 5.424 17.82  0  0    3    4
Chrysler Imperial    6.2475   8 440.0 230 3.23 5.345 17.42  0  0    3    4
Fiat 128            13.7700   4  78.7  66 4.08 2.200 19.47  1  1    4    1
Honda Civic         12.9200   4  75.7  52 4.93 1.615 18.52  1  1    4    2
Toyota Corolla      14.4075   4  71.1  65 4.22 1.835 19.90  1  1    4    1
Toyota Corona        9.1375   4 120.1  97 3.70 2.465 20.01  1  0    3    1
Dodge Challenger     6.5875   8 318.0 150 2.76 3.520 16.87  0  0    3    2
AMC Javelin          6.4600   8 304.0 150 3.15 3.435 17.30  0  0    3    2
Camaro Z28           5.6525   8 350.0 245 3.73 3.840 15.41  0  0    3    4
Pontiac Firebird     8.1600   8 400.0 175 3.08 3.845 17.05  0  0    3    2
Fiat X1-9           11.6025   4  79.0  66 4.08 1.935 18.90  1  1    4    1
Porsche 914-2       11.0500   4 120.3  91 4.43 2.140 16.70  0  1    5    2
Lotus Europa        12.9200   4  95.1 113 3.77 1.513 16.90  1  1    5    2
Ford Pantera L       6.7150   8 351.0 264 4.22 3.170 14.50  0  1    5    4
Ferrari Dino         8.3725   6 145.0 175 3.62 2.770 15.50  0  1    5    6
Maserati Bora        6.3750   8 301.0 335 3.54 3.570 14.60  0  1    5    8
Volvo 142E           9.0950   4 121.0 109 4.11 2.780 18.60  1  1    4    2
                    efficiency
Mazda RX4            3.4064885
Mazda RX4 Wag        3.1043478
Datsun 710           4.1767241
Hornet 4 Drive       2.8289269
Hornet Sportabout    2.3103198
Valiant              2.2232659
Duster 360           1.7023810
Merc 240D            3.2507837
Merc 230             3.0761905
Merc 280             2.3720930
Merc 280C            2.1991279
Merc 450SE           1.7125307
Merc 450SL           1.9711796
Merc 450SLC          1.7089947
Cadillac Fleetwood   0.8419048
Lincoln Continental  0.8148968
Chrysler Imperial    1.1688494
Fiat 128             6.2590909
Honda Civic          8.0000000
Toyota Corolla       7.8514986
Toyota Corona        3.7068966
Dodge Challenger     1.8714489
AMC Javelin          1.8806405
Camaro Z28           1.4720052
Pontiac Firebird     2.1222367
Fiat X1-9            5.9961240
Porsche 914-2        5.1635514
Lotus Europa         8.5393258
Ford Pantera L       2.1182965
Ferrari Dino         3.0225632
Maserati Bora        1.7857143
Volvo 142E           3.2715827

4. arrange() - Reorder rows

# Sort by mpg (ascending)
arrange(mtcars, mpg)
                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
# Sort by mpg (descending)
arrange(mtcars, desc(mpg))
                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4
# Sort by multiple columns
arrange(mtcars, cyl, desc(mpg))
                     mpg cyl  disp  hp drat    wt  qsec vs am gear carb
Toyota Corolla      33.9   4  71.1  65 4.22 1.835 19.90  1  1    4    1
Fiat 128            32.4   4  78.7  66 4.08 2.200 19.47  1  1    4    1
Honda Civic         30.4   4  75.7  52 4.93 1.615 18.52  1  1    4    2
Lotus Europa        30.4   4  95.1 113 3.77 1.513 16.90  1  1    5    2
Fiat X1-9           27.3   4  79.0  66 4.08 1.935 18.90  1  1    4    1
Porsche 914-2       26.0   4 120.3  91 4.43 2.140 16.70  0  1    5    2
Merc 240D           24.4   4 146.7  62 3.69 3.190 20.00  1  0    4    2
Datsun 710          22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1
Merc 230            22.8   4 140.8  95 3.92 3.150 22.90  1  0    4    2
Toyota Corona       21.5   4 120.1  97 3.70 2.465 20.01  1  0    3    1
Volvo 142E          21.4   4 121.0 109 4.11 2.780 18.60  1  1    4    2
Hornet 4 Drive      21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1
Mazda RX4           21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag       21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4
Ferrari Dino        19.7   6 145.0 175 3.62 2.770 15.50  0  1    5    6
Merc 280            19.2   6 167.6 123 3.92 3.440 18.30  1  0    4    4
Valiant             18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1
Merc 280C           17.8   6 167.6 123 3.92 3.440 18.90  1  0    4    4
Pontiac Firebird    19.2   8 400.0 175 3.08 3.845 17.05  0  0    3    2
Hornet Sportabout   18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2
Merc 450SL          17.3   8 275.8 180 3.07 3.730 17.60  0  0    3    3
Merc 450SE          16.4   8 275.8 180 3.07 4.070 17.40  0  0    3    3
Ford Pantera L      15.8   8 351.0 264 4.22 3.170 14.50  0  1    5    4
Dodge Challenger    15.5   8 318.0 150 2.76 3.520 16.87  0  0    3    2
Merc 450SLC         15.2   8 275.8 180 3.07 3.780 18.00  0  0    3    3
AMC Javelin         15.2   8 304.0 150 3.15 3.435 17.30  0  0    3    2
Maserati Bora       15.0   8 301.0 335 3.54 3.570 14.60  0  1    5    8
Chrysler Imperial   14.7   8 440.0 230 3.23 5.345 17.42  0  0    3    4
Duster 360          14.3   8 360.0 245 3.21 3.570 15.84  0  0    3    4
Camaro Z28          13.3   8 350.0 245 3.73 3.840 15.41  0  0    3    4
Cadillac Fleetwood  10.4   8 472.0 205 2.93 5.250 17.98  0  0    3    4
Lincoln Continental 10.4   8 460.0 215 3.00 5.424 17.82  0  0    3    4

5. summarize() - Collapse rows to summary statistics

# Calculate summary statistics
summarize(mtcars,
          avg_mpg = mean(mpg),
          max_hp = max(hp),
          count = n())
   avg_mpg max_hp count
1 20.09062    335    32

6. group_by() - Group data for operations

# Group by cylinder and calculate statistics per group
mtcars %>%
  group_by(cyl) %>%
  summarize(
    count = n(),
    avg_mpg = mean(mpg),
    avg_hp = mean(hp),
    .groups = "drop"
  )
# A tibble: 3 × 4
    cyl count avg_mpg avg_hp
  <dbl> <int>   <dbl>  <dbl>
1     4    11    26.7   82.6
2     6     7    19.7  122. 
3     8    14    15.1  209. 

The Pipe Operator (%>%)

The pipe operator makes code more readable by chaining operations:

# Without pipes
result1 <- filter(mtcars, cyl == 4)
result2 <- select(result1, mpg, hp, wt)
result3 <- arrange(result2, desc(mpg))
result3
                mpg  hp    wt
Toyota Corolla 33.9  65 1.835
Fiat 128       32.4  66 2.200
Honda Civic    30.4  52 1.615
Lotus Europa   30.4 113 1.513
Fiat X1-9      27.3  66 1.935
Porsche 914-2  26.0  91 2.140
Merc 240D      24.4  62 3.190
Datsun 710     22.8  93 2.320
Merc 230       22.8  95 3.150
Toyota Corona  21.5  97 2.465
Volvo 142E     21.4 109 2.780
# With pipes - same operations, more readable
mtcars %>%
  filter(cyl == 4) %>%
  select(mpg, hp, wt) %>%
  arrange(desc(mpg))
                mpg  hp    wt
Toyota Corolla 33.9  65 1.835
Fiat 128       32.4  66 2.200
Honda Civic    30.4  52 1.615
Lotus Europa   30.4 113 1.513
Fiat X1-9      27.3  66 1.935
Porsche 914-2  26.0  91 2.140
Merc 240D      24.4  62 3.190
Datsun 710     22.8  93 2.320
Merc 230       22.8  95 3.150
Toyota Corona  21.5  97 2.465
Volvo 142E     21.4 109 2.780

More Useful dplyr Functions

distinct() - Get unique rows

# Get unique values of cyl and gear
mtcars %>%
  select(cyl, gear) %>%
  distinct()
                  cyl gear
Mazda RX4           6    4
Datsun 710          4    4
Hornet 4 Drive      6    3
Hornet Sportabout   8    3
Toyota Corona       4    3
Porsche 914-2       4    5
Ford Pantera L      8    5
Ferrari Dino        6    5

count() - Count occurrences

# Count cars by cylinder
mtcars %>%
  count(cyl, sort = TRUE)
  cyl  n
1   8 14
2   4 11
3   6  7
# Count by multiple variables
mtcars %>%
  count(cyl, gear)
  cyl gear  n
1   4    3  1
2   4    4  8
3   4    5  2
4   6    3  2
5   6    4  4
6   6    5  1
7   8    3 12
8   8    5  2

slice() - Select rows by position

# Select first 5 rows
mtcars %>%
  slice(1:5)
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
# Select top 3 rows by mpg
mtcars %>%
  arrange(desc(mpg)) %>%
  slice(1:3)
                mpg cyl disp hp drat    wt  qsec vs am gear carb
Toyota Corolla 33.9   4 71.1 65 4.22 1.835 19.90  1  1    4    1
Fiat 128       32.4   4 78.7 66 4.08 2.200 19.47  1  1    4    1
Honda Civic    30.4   4 75.7 52 4.93 1.615 18.52  1  1    4    2

pull() - Extract a column as a vector

# Extract mpg column as a vector
mtcars %>%
  pull(mpg)
 [1] 21.0 21.0 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 17.8 16.4 17.3 15.2 10.4
[16] 10.4 14.7 32.4 30.4 33.9 21.5 15.5 15.2 13.3 19.2 27.3 26.0 30.4 15.8 19.7
[31] 15.0 21.4

Combining Multiple Operations

Let’s solve a more complex problem by combining multiple dplyr functions:

# First add rownames as a column
cars_with_names <- mtcars %>%
  tibble::rownames_to_column("model")

# Now perform the analysis
cars_with_names %>%
  group_by(cyl) %>%
  filter(mpg == max(mpg)) %>%
  select(cyl, model, mpg, hp) %>%
  arrange(cyl) %>%
  ungroup()
# A tibble: 3 × 4
    cyl model              mpg    hp
  <dbl> <chr>            <dbl> <dbl>
1     4 Toyota Corolla    33.9    65
2     6 Hornet 4 Drive    21.4   110
3     8 Pontiac Firebird  19.2   175

Working with Joins

dplyr provides functions for joining datasets:

# Create sample datasets
manufacturers <- data.frame(
  make = c("Honda", "Toyota", "Ford", "BMW", "Mercedes"),
  country = c("Japan", "Japan", "USA", "Germany", "Germany"),
  stringsAsFactors = FALSE
)

cars <- data.frame(
  model = c("Civic", "Corolla", "Focus", "3 Series", "Fiesta"),
  make = c("Honda", "Toyota", "Ford", "BMW", "Ford"),
  stringsAsFactors = FALSE
)

# Inner join - only matching rows
inner_join(cars, manufacturers, by = "make")
     model   make country
1    Civic  Honda   Japan
2  Corolla Toyota   Japan
3    Focus   Ford     USA
4 3 Series    BMW Germany
5   Fiesta   Ford     USA
# Left join - all rows from cars
left_join(cars, manufacturers, by = "make")
     model   make country
1    Civic  Honda   Japan
2  Corolla Toyota   Japan
3    Focus   Ford     USA
4 3 Series    BMW Germany
5   Fiesta   Ford     USA
# Full join - all rows from both
full_join(cars, manufacturers, by = "make")
     model     make country
1    Civic    Honda   Japan
2  Corolla   Toyota   Japan
3    Focus     Ford     USA
4 3 Series      BMW Germany
5   Fiesta     Ford     USA
6     <NA> Mercedes Germany

dplyr makes data manipulation in R more intuitive and efficient. Its consistent syntax and the pipe operator allow you to write code that’s both powerful and readable.