Finding Duplicate Values in a Data Frame in R: A Guide Using Base R and dplyr


In data analysis and programming, it’s common to encounter situations where you need to identify duplicate values within a dataset. Whether you’re a beginner or an experienced programmer, knowing how to find duplicate values is a fundamental skill. In this blog post, we will explore two different approaches to accomplish this task using base R functions and the dplyr package in R. By the end, you’ll have a clear understanding of how to detect and manage duplicate values in your own datasets.

Using Base R Functions

R provides a variety of functions for data manipulation and analysis, including those specifically designed for identifying duplicate values. Let’s consider a simple data frame to demonstrate this approach:

# Creating a sample data frame
df <- data.frame(
  ID = c(1, 2, 3, 3, 4, 5),
  Name = c("John", "Jane", "Mark", "Mark", "Luke", "Kate"),
  Age = c(25, 30, 35, 35, 40, 45)

To find duplicate values in this data frame using base R functions, we can utilize the duplicated() and table() functions:

# Using base R functions to find duplicate values
duplicates <- df[duplicated(df), ]
duplicate_counts <- table(df[duplicated(df), ])

  ID Name Age
4  3 Mark  35
, , Age = 35

ID  Mark
  3    1

The duplicated() function identifies the duplicate rows in the data frame, while the table() function creates a frequency table of the duplicate values. By combining these two functions, we can detect and examine the duplicate entries in the data frame.

Using dplyr

The dplyr package provides a powerful set of tools for data manipulation and analysis. Let’s see how we can accomplish the same task of finding duplicate values using dplyr functions:

# loading the dplyr package

# Using dplyr to find duplicate values
duplicates <- df |>
  group_by_all() |>
  filter(n() > 1) |>

duplicate_counts <- df |>
  add_count(ID, Name, Age) |>
  filter(n > 1) |>

# A tibble: 2 × 3
     ID Name    Age
  <dbl> <chr> <dbl>
1     3 Mark     35
2     3 Mark     35
  ID Name Age n
1  3 Mark  35 2

Let’s break the first one down step by step:

duplicates <- df |>
  group_by_all() |>
  filter(n() > 1) |>
  1. df refers to a data frame in R.
  2. group_by_all() groups the data frame by all columns. This means that the subsequent operations will consider duplicate values across all columns.
  3. filter(n() > 1) filters the grouped data frame to only keep rows where the count (n()) of observations is greater than 1. In other words, it keeps only the rows that have duplicates.
  4. ungroup() removes the grouping, ensuring that the resulting data frame is not grouped anymore.
  5. The resulting data frame with duplicate rows is assigned to the variable duplicates.

Now, let’s move on to the second part:

duplicate_counts <- df |>
  add_count(ID, Name, Age) |>
  filter(n > 1) |>
  1. add_count(ID, Name, Age) adds a new column called “n” to the data frame, which represents the count of observations for each combination of ID, Name, and Age.
  2. filter(n > 1) keeps only the rows where the count (“n”) is greater than 1. This retains only the rows that have duplicates based on the specified columns.
  3. distinct() removes any duplicate rows that may still exist after the previous steps, keeping only unique rows.
  4. The resulting data frame with duplicate counts and unique rows is assigned to the variable duplicate_counts.

In simple terms, the code first identifies and extracts the duplicate rows from the original data frame (df) and assigns them to duplicates. Then, it calculates the counts of duplicates based on specific columns (ID, Name, and Age) and stores the results, along with unique rows, in duplicate_counts.

These operations allow you to conveniently find duplicate rows and examine their counts within a data frame using both base R functions and some simple dplyr code.


Detecting and managing duplicate values is an essential task in data analysis and programming. In this blog post, we explored two different approaches to find duplicate values in a data frame using base R functions and the dplyr package. By leveraging these techniques, you can efficiently identify and handle duplicate entries in your own datasets.

I encourage you to practice using these methods on your own datasets. Familiarize yourself with the functions, experiment with different data frames, and explore various scenarios. This hands-on experience will deepen your understanding and improve your data analysis skills.

Remember, the ability to identify and manage duplicate values is crucial for ensuring data integrity and obtaining accurate results in your data analysis projects. So go ahead, give it a try, and unlock the power of duplicate value detection in R!