How to Use complete.cases in R (With Examples)


You can use the complete.cases() function in R to remove missing values in a vector, matrix, or data frame.

This function uses the following basic syntax:

#remove missing values from vector
x <- x[complete.cases(x)]

#remove rows with missing values in any column of data frame
df <- df[complete.cases(df), ]

#remove rows with NA in specific columns of data frame
df <- df[complete.cases(df[ , c('col1', 'col2', ...)]), ] 

The following examples show how to use this function in practice.

Example 1: Remove Missing Values from Vector

The following code shows how to remove all NA values from a vector:

#define vector
x <- c(1, 24, NA, 6, NA, 9)

#remove NA values from vector
x <- x[complete.cases(x)]

x

[1]  1 24  6  9

Example 2: Remove Rows with NA in Any Column of Data Frame

The following code shows how to remove rows with NA values in any column of a data frame :

#define data frame
df <- data.frame(x=c(1, 24, NA, 6, NA, 9),
                 y=c(NA, 3, 4, 8, NA, 12),
                 z=c(NA, 7, 5, 15, 7, 14))

#view data frame
df

   x  y  z
1  1 NA NA
2 24  3  7
3 NA  4  5
4  6  8 15
5 NA NA  7
6  9 12 14

#remove rows with NA value in any column data frame
df <- df[complete.cases(df), ]

#view data frame 
df

   x  y  z
2 24  3  7
4  6  8 15
6  9 12 14

Example 3: Remove Rows with NA in Specific Columns of Data Frame

The following code shows how to remove rows with NA values in specific columns of a data frame :

#define data frame
df <- data.frame(x=c(1, 24, NA, 6, NA, 9),
                 y=c(NA, 3, 4, 8, NA, 12),
                 z=c(NA, 7, 5, 15, 7, 14))

#view data frame
df

   x  y  z
1  1 NA NA
2 24  3  7
3 NA  4  5
4  6  8 15
5 NA NA  7
6  9 12 14

#remove rows with NA value in y or z column
df <- df[complete.cases(df[ , c('y', 'z')]), ]

#view data frame 
df

   x  y  z
2 24  3  7
3 NA  4  5
4  6  8 15
6  9 12 14

Additional Resources

How to Use “Is Not NA” in R
How to Impute Missing Values in R
How to Replace NAs with Strings in R

Leave a Reply

Your email address will not be published.