How to Use drop_na to Drop Rows with Missing Values in R

Spread the love

Dealing with missing values is one of the most essential steps in the data cleaning process. Missing values can significantly impact the analysis and conclusions drawn from the data. In the R programming language, the tidyverse package collection, especially the dplyr and tidyr packages, offers a variety of options for managing missing values. One such function is drop_na.

The drop_na function in R is used to remove rows containing missing values (NA) from a data frame or tibble. In this comprehensive guide, we’ll cover several aspects of using drop_na, including syntax, examples, and best practices.

Introduction to drop_na

The drop_na function is part of the tidyr package, which is itself a part of the tidyverse collection of packages. It’s specifically designed to work with tibbles but also works well with data frames. The primary purpose is to quickly and efficiently remove rows containing missing (NA) values.

Installation and Loading Packages

If you have not yet installed the tidyverse package, you can do so using the following command:


After installation, you can load the necessary packages using:



The basic syntax of drop_na is as follows:

drop_na(data, ...)
  • data: The data frame or tibble to process.
  • ...: Optional, columns by which to filter out missing values. If left blank, drop_na will remove any row that contains at least one NA value in any column.

Basic Usage

Here’s a simple example:

# Create a tibble with missing values
data <- tibble(
  id = c(1, 2, 3, 4),
  value1 = c(NA, 20, 30, 40),
  value2 = c(10, NA, 50, 60)

# Drop rows containing NA values
clean_data <- drop_na(data)

In this case, clean_data will only contain the rows where both value1 and value2 are not NA.

Dropping Rows Based on Specific Columns

You can also specify which columns to consider when dropping rows. For example:

# Drop rows where 'value1' is NA
clean_data_value1 <- drop_na(data, value1)

# Drop rows where either 'value1' or 'value2' is NA
clean_data_either <- drop_na(data, value1, value2)

Working with Nested Columns

If you’re working with more complicated data structures, such as nested columns, you can still use drop_na.

# Create a nested tibble
nested_data <- tibble(
  id = c(1, 2, 3),
  values = list(
    tibble(value = c(10, NA, 30)),
    tibble(value = c(40, 50, 60)),
    tibble(value = c(NA, NA, NA))

# Use drop_na with unnest and re-nest the data
clean_nested_data <- nested_data %>% 
  unnest(values) %>% 
  drop_na() %>% 
  nest(values = c(value))

Performance Considerations

The drop_na function is optimized for speed and is particularly efficient with large datasets. It leverages C++ under the hood for data manipulation, providing a performance advantage over base R functions for the same operation.

Alternatives to drop_na

Although drop_na is highly efficient, there are other methods for removing NA values, including:

  • Using na.omit() from base R.
  • Using filter() from dplyr with the function.
  • Manually subsetting the data frame.
# Using na.omit
clean_data <- na.omit(data)

# Using dplyr's filter and
clean_data <- data %>% filter(! & !

Each method has its own set of advantages and disadvantages, but drop_na is generally the most straightforward when working within the tidyverse ecosystem.


The drop_na function in R is a powerful tool for handling missing values in a data frame or tibble. Whether you need to remove rows with any missing values or only those missing in specific columns, drop_na provides a simple and effective way to do so.

Posted in RTagged

Leave a Reply