如何使用dplyr查找重复的元素(附实例)

105 阅读1分钟

你可以使用以下方法来寻找数据框架中的重复元素,使用dplyr。

方法1:显示所有重复的行

library(dplyr)

#display all duplicate rows
df %>%
  group_by_all() %>%
  filter(n()>1) %>%
  ungroup()

方法2:显示所有重复行的重复数

library(dplyr)

#display duplicate count for all duplicated rows
df %>%
  add_count(col1, col2, col3) %>%
  filter(n>1) %>%
  distinct()

本教程解释了如何在以下数据框中实际使用每种方法:

#create data frame
df <- data.frame(team=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'),
                 position=c('G', 'G', 'F', 'F', 'G', 'G', 'F', 'F'),
                 points=c(10, 10, 8, 14, 15, 15, 17, 17))

#view data frame
df

  team position points
1    A        G     10
2    A        G     10
3    A        F      8
4    A        F     14
5    B        G     15
6    B        G     15
7    B        F     17
8    B        F     17

例1:显示所有重复的行

下面的代码显示了如何显示数据框中所有重复的行:

library(dplyr)

#display all duplicate rows in data frame
df %>%
  group_by_all() %>%
  filter(n()>1) %>%
  ungroup()

# A tibble: 6 x 3
  team  position points
        
1 A     G            10
2 A     G            10
3 B     G            15
4 B     G            15
5 B     F            17
6 B     F            17

结果是一个包含6行的数据框,其中每一行都是重复的行。

注意:如果你只想知道哪些行在特定的列中有重复的值,你可以用group_by(team)这样的方法来找到只在team列中有重复值的行。

例2:显示所有重复的行的重复数

下面的代码显示了如何显示数据框中所有重复的行的重复计数:

library(dplyr)

#display duplicate count for each row
df %>%
  add_count(team, position, points) %>%
  filter(n>1) %>%
  distinct()

  team position points n
1    A        G     10 2
2    B        G     15 2
3    B        F     17 2

n列显示每行的重复总数。

比如说:

  • 值为A、G和10的行在数据框中出现2次。
  • 值为B,G,和15的行在数据框中出现2次。
  • 值为B,F,和17的行在数据框中出现2次。

注意:如果你只想知道哪些行在特定的列中有重复的值,那么在**add_count()**函数中只包括那些特定的列。