Как найти дубликаты на основе значений в 2 столбцах, а также группировки по другому столбцу в R? - PullRequest
0 голосов
/ 02 июля 2019

У меня есть набор данных с 3 столбцами: ID, значение a и значение b.Я хочу сгруппировать набор данных на основе значений в столбце ID, а затем идентифицировать дубликаты с одинаковыми данными в столбцах значений a и b между различными группировками.

Я знаю, что могу использовать пакет dplyr и данные%>% group_by (ID), чтобы сгруппировать мой набор данных на основе столбца ID.Я также знаю, что могу использовать data [duplicated (data [, 2: 3])], чтобы вернуть все строки с дублирующимися данными в строках 2 (значение a) и 3 (значение b).

Однако мне бы хотелось, чтобы функция могла находить дубликаты только между различными группами идентификаторов, а не просто дубликаты во всем наборе данных.Я пытался объединить group_by и duplicated, но он не возвращает правильные результаты.Какая функция это сделает?

1 Ответ

0 голосов
/ 02 июля 2019

Было немного неясно, хотите ли вы вернуться:

  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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...