Replace 0 with NA in R (Example) | Changing Zero in Data Frame & Vector


In this article, I’ll illustrate how to substitute 0 with NA in the R programming language.

The tutorial will contain this:

Let’s dive into it!


Creation of Example Data

We’ll use the following data frame for the example of this R programming tutorial:

data <- data.frame(x1 = c(2, 0, 7, 4, 0, 5),    # Create example data
                   x2 = c(0, 0, 0, 1, 1, 0))
data                                            # Print example data
# x1 x2
# 1  2  0
# 2  0  0
# 3  7  0
# 4  4  1
# 5  0  1
# 6  5  0

Our example data consists of six rows and two variables x1 and x2. Some of the values of these two rows are zero.


Example: Replace 0 with NA

Replacing 0 by NA in R is a simple task. We simply have to run the following R code:

data[data == 0] <- NA                           # Replace 0 with NA
data                                            # Print updated data
#   x1 x2
# 1  2 NA
# 2 NA NA
# 3  7 NA
# 4  4  1
# 5 NA  1
# 6  5 NA

As you can see based on the RStudio console output, we replaced all 0 values with NA values. Note that we could apply the same code to a vector or a single data frame column.


Video, Further Resources & Summary

Do you want to learn more about the manipulation of data in R? Then you could have a look at the following video of my YouTube channel. I show the R code of this tutorial in the video.


Please accept YouTube cookies to play this video. By accepting you will be accessing content from YouTube, a service provided by an external third party.

YouTube Content Consent Button Thumbnail

YouTube privacy policy

If you accept this notice, your choice will be saved and the page will refresh.


In addition, you might want to have a look at the other tutorials on You can find a selection of tutorials below:


This article explained how to change zeros in a data frame or vector to not available values in the R programming language. Tell me about it in the comments section, in case you have any further questions and/or comments.


Subscribe to the Statistics Globe Newsletter

Get regular updates on the latest tutorials, offers & news at Statistics Globe.
I hate spam & you may opt out anytime: Privacy Policy.

4 Comments. Leave new

  • But what if I only want to change the 0’s to NA in one column only of my data set?

    • Hey Jessie,

      You may access the values of a single column using the $ operator. Please try the following R code:

      data$x1[data$x1 == 0] <- NA



  • Scott Jackson
    April 22, 2022 12:47 am

    I like the answer, and it works, but I’m here searching for this right now because I have a string of magrittr pipes ‘%>%’ written, and I have to break out of it to use that convention above. I have a column in a dataframe where I have NAs that will stay NA, and other values that I want to be NAs.

    This FAILS:

    %>%  mutate(Q4_spend = if_else(( | (Q4_spend < 100)), NA, Q4_spend)) %>%

    But this works (arbitrary 5 instead of NA):

    %>%  mutate(Q4_spend = if_else(( | (Q4_spend < 100)), 5, Q4_spend)) %>%

    Any thoughts on how to make the first case work without breaking off the pipe chain?

    • Hey Scott,

      Thank you, glad you found the tutorial helpful!

      I’m not sure why this code doesn’t work for you. However, would it be an alternative to use the Base R ifelse() function instead of the dplyr if_else function?

      For example:

      ifelse(, NA)), NA, "xxx")



Leave a Reply

Your email address will not be published. Required fields are marked *

Fill out this field
Fill out this field
Please enter a valid email address.