首页 > 解决方案 > 如何根据 2 列中的值以及 R 中另一列的分组来查找重复项?

问题描述

我有一个包含 3 列的数据集:ID、值 a 和值 b。我想根据 ID 列中的值对数据集进行分组,然后识别在不同分组之间的值 a 和 b 列中具有相同数据的重复项。

我知道我可以使用 dplyr 包和数据 %>% group_by (ID) 根据 ID 列对我的数据集进行分组。我也知道我可以使用 data[duplicated(data[,2:3]),] 返回第 2 行(值 a)和第 3 行(值 b)中具有重复数据的所有行。

但是,我想要一个只能在不同 ID 组之间找到重复项的函数,而不仅仅是在整个数据集中找到重复项。我试过组合 group_by 和 duplicated,但它没有返回正确的结果。哪个函数会这样做?

标签: r

解决方案


您是否想返回有点不清楚:

  1. 只有不同的行
  2. 重复行的单个示例
  3. 所有重复的行

所以这里有一些选择:

library(dplyr)
library(readr)

"ID,a,b
 1, 1, 1
 1, 1, 1
 1, 1, 2
 2, 1, 1
 2, 1, 2" %>% 
  read_csv() -> exp_dat

# return only distinct rows
exp_dat %>% 
  distinct(ID, a, b)

# # A tibble: 4 x 3
#      ID     a     b
#   <dbl> <dbl> <dbl>
# 1     1     1     1
# 2     1     1     2
# 3     2     1     1
# 4     2     1     2

# return single examples of duplicated rows
exp_dat %>% 
  group_by(ID, a, b) %>% 
  count() %>% 
  filter(n > 1) %>% 
  ungroup() %>% 
  select(-n)

# # A tibble: 1 x 3
#      ID     a     b
#   <dbl> <dbl> <dbl>
# 1     1     1     1

# return all duplicated rows
exp_dat %>% 
  group_by(ID, a, b) %>% 
  add_count() %>% 
  filter(n > 1) %>% 
  ungroup() %>% 
  select(-n)

# # A tibble: 2 x 3
#      ID     a     b
#   <dbl> <dbl> <dbl>
# 1     1     1     1
# 2     1     1     1

推荐阅读